Проверка формы с использованием экземпляра - PullRequest
0 голосов
/ 28 мая 2011

Я проверяю ImageField в форме модели.То, что у меня сейчас есть, работает -

# in model
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', 'headline')

    def clean_avatar(self):
        if not self.cleaned_data['avatar']:
            raise forms.ValidationError('Oops, looks like you forgot to attach an image!')
        else:
            return self.cleaned_data['avatar']

# in views
def getting_started_pic(request):
    username = request.session.get('username')
    profile = UserProfile.objects.get(user=username)
    if request.method == 'POST':
        form = ProfilePictureForm(request.POST, request.FILES)
        if form.is_valid():
            form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
            form.save()
            return render_to_response (...)

Обратите внимание, что я устанавливаю переменную формы дважды, сначала без экземпляра, а затем с экземпляром.Когда я определил форму только один раз (включая instance = profile), мир форм никогда не вернет None, и, таким образом, форма не будет правильно проверена (т. Е. Self.cleaned_data ['avatar'] всегда была непустой).

У меня есть два вопроса, связанных с этим:

1 - Почему (... instance = profile) влияет на часть self.cleaned_data ['avatar']?

2 -Как я могу удалить избыточность в этой функции просмотра?

1 Ответ

1 голос
/ 28 мая 2011

Я не знаю, проверяли ли вы это, но если в вашем профиле уже есть действительный аватар, то cleaned_data покажет это значение, если пользователь не ввел другое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...