使用实例进行表单验证

| 我正在以模型形式验证
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 (...)
请注意,我将两次设置form变量,首先不使用实例,然后再使用实例。当我只定义一次表单(包括
instance = profile
)时,表单世界从不返回None,因此表单将无法正确验证(即self.cleaned_data [\'avatar \']始终为非空)。 我有两个与此有关的问题: 1-为什么(... instance =配置文件)影响self.cleaned_data [\'avatar \']部分? 2-如何删除此视图功能中的冗余?     
已邀请:
        我不知道您是否已经检查过,但是如果您的个人资料实例已经具有有效的头像,那么如果用户未输入其他值,cleaned_data将显示该值。     

要回复问题请先登录注册