首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我犯了一个错误:"AttributeError at /uz/AttributeError/update/ 'str‘对象没有属性'_meta’“

我犯了一个错误:"AttributeError at /uz/AttributeError/update/ 'str‘对象没有属性'_meta’“
EN

Stack Overflow用户
提问于 2021-07-17 16:29:25
回答 1查看 43关注 0票数 1

当您单击“保存”按钮时,会出现上述错误,但在文档中,我认为我输入了正确的参数。这段代码在我的views.py中的位置:

代码语言:javascript
复制
class AllUserUpdate(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
    alluser = CustomUser.objects.get(username=self.request.user.username)
    form = CustomUserForm(instance=alluser)
    context = {'form':form}
    return render(request, 'account/AllUserAccount.html', context)

def post(self, request, *args, **kwargs):
    form = CustomUserForm(self.request.POST, self.request.FILES, instance=self.request.user.username)
    if form.is_valid():
        form.save()
        messages.info(self.request, "Your are change successfully created!")
        context = {'form': form}
        return redirect('all_user_update')

这就是我的模板的样子:

代码语言:javascript
复制
<form  method="post" enctype="multipart/form-data">
            {% csrf_token %}
                <h3>Full name: {{ request.user.full_name }}</h3>
                {{ form.as_p }}
                <input type="submit" class=" btn btn-primary" value="Save">
        </form>

forms.py:

代码语言:javascript
复制
class CustomUserForm(UserCreationForm):
password1 = forms.CharField(widget=forms.PasswordInput(
    attrs={'class': 'form-control mt-2', 'name': 'password1', 'placeholder': 'enter the password...'}))
password2 = forms.CharField(widget=forms.PasswordInput(
    attrs={'class': 'form-control mt-2', 'name': 'password2', 'placeholder': 'Repeat the password...'}))

class Meta:
    model = CustomUser
    fields = ('full_name', 'email', 'user_type', 'phone', 'password1', 'password2', 'username')
    widgets = {
        'full_name': forms.TextInput(attrs={'class': 'form-control mt-2', 'name': 'full_name'}),
        'username': forms.TextInput(attrs={'class': 'form-control mt-2', 'name': 'username'}),
        'email': forms.EmailInput(attrs={'class': 'form-control mt-2', 'name': 'email'}),
        'phone': forms.TextInput(attrs={'class': 'form-control mt-2', 'name': 'phone'}),
        'user_type': forms.Select(attrs={'class': 'form-control mt-2', 'name': 'user_type'}),
    }

我希望用户更改他们的个人页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-17 16:50:21

在这条线上:

代码语言:javascript
复制
    form = CustomUserForm(self.request.POST, self.request.FILES, instance=self.request.user.username)

您正在传递一个字符串(str)作为表单的instance。这不是instance参数所期望的;它需要一个Model实例(就像您在get方法中正确地传递它一样,前面几行)。

将希望作为instance更新的instance传递给您,例如:

代码语言:javascript
复制
    customuser = CustomUser.objects.get(username=request.user.username)
    form = CustomUserForm(request.POST, instance=customuser)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68422363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档