У меня есть конечная точка, которая при вызове должна либо обновить, либо создать профиль пользователя.Внутри этой конечной точки находятся 3 поля, которые необходимо создать или обновить (avatar, bio, gender)
В настоящее время я работаю с UpdateAPIView
, например, так:
class UpdateOrCreateProfile(UpdateAPIView):
serializer_class = ProfileSerializer
def get_object(self):
return Profile.objects.get(user=self.request.user)
Класс сериализатора выглядит следующим образом:
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = '__all__'
Это хорошо работает, однако проверка работает неправильно.Отображаемая форма имеет функцию clean_avatar
, которая не принимает изображения размером менее 200x200 пикселей.Вот так:
class ProfileForm(ModelForm):
avatar = forms.ImageField(required=False, widget=forms.FileInput)
bio = forms.CharField(widget=forms.Textarea(attrs={'rows': 3, "placeholder": "Bio"}), max_length=200,
required=False)
class Meta:
model = Profile
fields = ['avatar', 'bio', 'gender']
def clean_avatar(self):
picture = self.cleaned_data.get("avatar")
if picture:
w, h = get_image_dimensions(picture)
if w < 200:
raise forms.ValidationError("The image is %i pixel wide. It's supposed to be more than 200px" % w)
if h < 200:
raise forms.ValidationError("The image is %i pixel high. It's supposed to be 200px" % h)
return picture
Как я могу сделать так, чтобы такая же проверка, которая происходит в форме, также происходила в моей конечной точке?