Проверка в ModelForm

#django #django-forms

#django #django-формы

Вопрос:

Я пытаюсь выполнить пользовательскую проверку в форме. Однако clean_ метод не работает (независимо от того, что я пытаюсь). Это то, что у меня сейчас есть —

 from django.forms import ModelForm
from django import forms

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    avatar = models.ImageField(upload_to='images/%Y/%m/%d', blank=True)

class ProfilePictureForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ('avatar',)

    def clean_avatar(self):
        try:
            raise  # this is just to see if the clean_ is working
        except:
            raise    
  

И в views

 def getting_started_pic(request):
    if request.method == 'POST':
        profile.avatar = request.FILES['avatar']
        profile.save()
        return render_to_response (...)
  

Чего мне не хватает, чтобы заставить clean_avatar метод «работать»? (В настоящее время это так, как если бы его там не было). Спасибо.

Ответ №1:

Я нигде не вижу экземпляра вашей ProfilePictureForm? Я предполагаю, что profile — это ваш экземпляр. Если это так, вам нужно вызвать is_valid() в вашем экземпляре ModelForm, чтобы был вызван ваш clean_avatar:

 def getting_started_pic(request):
  if request.method == 'POST':
    profile.avatar = request.FILES['avatar']
    if profile.is_valid():
        profile.save()
    return render_to_response (...)
  

Ответ №2:

Обычный рабочий процесс model forms — это::

 def some_view(request):
    profile = request.user.profile # or some other way to get user's profile
    if request.method == 'POST':
        form = ProfilePictureForm(request.POST, request.FILES, instance=profile)    
    else:
        form = ProfilePictureForm(instance=profile)
    if form.is_valid():
        form.save()
        # Redirect somewhere
    # Return failed form