【问题标题】:func form.is_valid() return all time Falsefunc form.is_valid() 一直返回 False
【发布时间】:2020-10-21 15:06:11
【问题描述】:

我有一个表单,它从用户模型和我自己的“电子邮件”字段中获取“用户名”。我想为 User 模型更改此数据。乍一看,一切似乎都很好,名称改变了,邮件还是一样的。但是,如果我只更改邮件并且不触摸用户名,则会收到错误消息:“具有此名称的用户已存在。

文件views.py:

form=UserUpdateForm(request.POST)
if form.is_valid():
    user=User.objects.get(username=self.request.user)
    user.username=form.cleaned_data.get('username')
    user.email=form.cleaned_data.get('email')
    user.save()

文件forms.py:

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField(required=False)
    def __init__(self,  *args, **kwargs):
        super(UserUpdateForm, self).__init__(*args, **kwargs)
        if 'label_suffix' not in kwargs:
            kwargs['label_suffix'] = '*'
        self.fields['username'].widget = forms.TextInput(attrs={'class':'input-text'})
        self.fields['email'].widget = forms.EmailInput(attrs={'class':'input-text'})
    class Meta:
        model = User
        fields = ("username","email",)
    def clean_email(self):
        cleaned_data = super(UserUpdateForm,self).clean() 
        email=cleaned_data.get('email')
        return email

【问题讨论】:

    标签: django django-forms django-validation


    【解决方案1】:

    来自doc

    ModelForm 的子类可以接受现有模型实例作为关键字参数实例;如果提供了这个, save() 将更新该实例。如果未提供,save() 将创建指定模型的新实例

    如果您要更新数据,则必须将实例传递给表单,

    # on updationg
    form = UserUpdateForm(data= request.POST, instance=your_mode_instance)

    由于不是第二次传递instance,Django认为该操作是行插入 em> 而不是 行更新

    【讨论】:

    • 哎呀还要传入"POST",明白了,谢谢!
    猜你喜欢
    • 2020-04-06
    • 2014-01-10
    • 2020-05-09
    • 2014-12-27
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多