首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 'User object‘META attribute META’

Django 'User object‘META attribute META’
EN

Stack Overflow用户
提问于 2019-11-15 02:39:34
回答 2查看 79关注 0票数 2

(很抱歉英文不好)当我定制表单时(forms.py)

代码语言:javascript
复制
class UserRegisterForm(UserCreationForm):
email = forms.EmailField(required=True, label='Email')
first_name = forms.CharField(required=True, label='First name', max_length=100)
last_name = forms.CharField(required=True, label='Last name', max_length=100)

class Meta(UserCreationForm.Meta):
    model = User
    fields = ["username", "first_name", "last_name", "email", "password1", "password2"]

    def save(self, commit=True):
        user = super(UserCreateForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

以下是我的观点

代码语言:javascript
复制
def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        user = authenticate(username=username, password=password)
        user.save()
        login(user)
        return redirect('/index/')
else: form = UserRegisterForm()

def login(request):
context = dict()
return render(request, "dashboard/login.html", context)

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        user = authenticate(username=username, password=password)
        user.save()
        login(user)
        return redirect('/index/')
else: form = UserRegisterForm()

context = {'form':form}
return render(request, 'dashboard/register.html', context)

def dashboard(request):

    return render(request, "dashboard/dashboard.html")

Django returnig me "AttributeError at /register/ 'User‘对象没有’META‘属性“idk为什么?我想保持顺序如何解决这个问题?

写出我错的地方

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-17 00:12:36

所以,你需要移除'Meta‘类并进行排序设置

forms.py

代码语言:javascript
复制
class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True, label='First name', max_length=100)
    last_name = forms.CharField(required=True, label='Last name', max_length=100)
    field_order = ["username", "first_name", "last_name", "email", "password1", 
    "password2"]

你需要在表单中保存你的字段

views.py

代码语言:javascript
复制
def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        instance = form.save() #form
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        email = request.POST.get('email') # getting email
        first_name = request.POST.get('first_name') # getting first name
        last_name = request.POST.get('last_name') # getting last name
        user = authenticate(username=username, password=password) #making user
        instance.email = email #saving email
        instance.first_name = first_name #saving email
        instance.last_name = last_name #saving email
        instance.save() #save form
        form.save_m2m() # save all
        return redirect('/login/')
        messages.success(request, f'You have been registred')
else: form = UserRegisterForm()

context = {'form':form}
return render(request, 'dashboard/register.html', context)
票数 0
EN

Stack Overflow用户

发布于 2019-11-15 02:42:26

删除meta类中的arg并将UserCreationForm更改为forms.Form

代码语言:javascript
复制
  class UserRegisterForm(forms.Form):
email = forms.EmailField(required=True, label='Email')
first_name = forms.CharField(required=True, label='First name', max_length=100)
last_name = forms.CharField(required=True, label='Last name', max_length=100)

class Meta: # just like this
    model = User
    fields = ["username", "first_name", "last_name", "email", "password1", "password2"]

    def save(self, commit=True):
        user = super(forms.Form, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

############################################################################

从form.py中删除def save,只需在view.py中简化它,如下例所示

代码语言:javascript
复制
            if obj.is_valid():
                x = Users.objects.get(u_id=request.session['user_id'])
                form.cleaned_data['userid'] = x
                form = obj.save(commit=False)
            form.save()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58863714

复制
相关文章

相似问题

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