我正在验证模型中的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']始终为非空)。 / p>
我有两个与此相关的问题:
1 - 为什么(... instance = profile)会影响self.cleaned_data ['avatar']部分?
2 - 如何在此视图功能中删除冗余?
答案 0 :(得分:1)
我不知道你是否已经检查了这个,但是如果你的个人资料实例已经有一个有效的头像,那么如果用户没有输入另一个值,cleaning_data将显示这个值。