Валидация поля формы, позволяющей загружать несколько фотографий

У меня есть пользовательская форма, позволяющая загружать несколько фотографий, которую я использую в модели UserAdmin. Также у меня есть собственный валидатор для поля в модели User. Я пытался сделать валидатор для поля моей формы, переопределив метод clean, но метод clean сделал мой пользовательский валидатор в модели User неработоспособным, а значит мой валидатор для поля в модели User стал бесполезным, так как метод clean в forms.py работает для всего. Я пытался пройти через это ответ, но он мне не помог. Как я могу заставить каждый валидатор работать для поля, для которого он предназначен?

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()

Вернуться на верх