Я проверяю 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 -Как я могу удалить избыточность в этой функции просмотра?