【问题标题】:Validate a field of form that allows multiple photos upload验证允许上传多张照片的表单字段
【发布时间】:2021-11-12 12:17:42
【问题描述】:

我有一个自定义表单,允许上传我在 UserAdmin 模型中使用的多张照片。我也有自己的 User 模型中的字段验证器。我试图通过覆盖 clean 方法为我的表单字段创建一个验证器,但是 clean 方法使我在用户模型中的自定义验证器无法使用,所以这意味着我的验证器用户模型中的字段变得无用,因为 forms.py 中的 clean 方法适用于所有内容。我试图通过this 回答,但它没有帮助我。我怎样才能让每个验证器都适用于它们所针对的领域?

forms.py

from django import forms
from django.utils.safestring import mark_safe

from .models import UserImage


class PhotoUploadForm(forms.ModelForm):
    photo = forms.FileField(
        widget=forms.ClearableFileInput(attrs={'multiple': True}),
        required=False,
        help_text='Необходимо количество фото - 10',
        label=mark_safe("<strong style='color:black'>Фото</strong>")
        )

    def clean_photos(self):
        photos = self.files.getlist('photo')
        if len(photos) != 10:
            raise forms.ValidationError(
                {'photo': f'Вы попытались загрузить {len(photos)} фотографий'})
        return photos

    class Meta:
        model = UserImage
        fields = '__all__'

admin.py

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    form = PhotoUploadForm

models.py

class User(models.Model):
    first_name = models.CharField(
        verbose_name='Имя',
        max_length=40,
        )
    last_name = models.CharField(
        verbose_name='Фамилия',
        max_length=40
        )
    rfid_mark = models.CharField(
        verbose_name='RFID',
        max_length=10,
        unique=True,
        help_text='RFID должен состоять из 10 символов',
        error_messages={
            'unique': 'Такой RFID уже существует'
        },
        validators=[validate_rfid_length]
        )

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    如果您要清理的字段称为photo,那么您需要的清理方法称为clean_photo() 而不是clean_photos()

    【讨论】:

    • 非常感谢!没注意这个
    猜你喜欢
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多