验证允许多张照片上传的表单字段

Validate a field of form that allows multiple photos upload

我有一个自定义表单,允许上传我在 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]
        )

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