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



我有一个自定义表单,可以上传我在UserAdmin模型中使用的多张照片。此外,对于User模型中的字段,我有自己的验证器。我试图通过覆盖clean方法为我的表单的字段创建一个验证器,但clean的方法使我在用户模型中的自定义验证器不可行,所以这意味着我在用户模式中的字段的验证器变得无用,因为forms.py中的clean法适用于所有情况。我尝试过这个答案,但它对我没有帮助。我如何让每个验证器为它们所要使用的字段工作?

表单.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

型号.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()

最新更新