【问题标题】:Django: Subclassing UserCreationForm: doesn't have get_user() method?Django:子类化 UserCreationForm:没有 get_user() 方法?
【发布时间】:2019-01-09 00:46:04
【问题描述】:

我通过继承普通用户模型在 Django 中创建了一个自定义用户。该用户的唯一区别是它没有用户名。现在,我正在尝试使用内置的 Django UserCreationForms 来登录用户。我将 UserCreationForm 子类化并创建了没有用户名字段的 SignUpForm。

我的控制流程如下: 1) 检查输入表单是否有效 2)如果是,让用户退出表单 3)保存表单(从而保存用户) 4) 登录用户

但是,当我尝试让用户退出 SignUpForm 实例时,它会抛出这个错误:AttributeError at /user/signup “SignUpForm”对象没有“get_user”属性

我不明白这一点,因为 SignUpForm 是 UserCreationForm 的直接子类,它实现了 get_user() 方法。我的views.py代码如下:


    from django.shortcuts import render, redirect
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth import authenticate, login
    from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
    from django.contrib.auth import get_user_model
    from django.db import models
    User = get_user_model()


    # Create your views here.

    class SignUpForm(UserCreationForm):
        email = models.EmailField(max_length=254, help_text='Required. Enter a valid email address.')
        username = None

        class Meta:
            model = User
            fields = ('email', 'password1', 'password2',)

    def signup(request):
        if request.method == 'POST': # if sending data to the server
            form = SignUpForm(request.POST)# creates form from request data
            if form.is_valid():
    #            print("form valid")
                user = form.get_user() # ERROR IS HERE
                form.save()
                login(request, user)
                return redirect('/manager')
            else:
                print("error")
        else:
            print("Get request asked for")
            form = SignUpForm()
            return render(request, 'user/signup.html', {'form': form}) # return rendered form

【问题讨论】:

    标签: python django forms django-custom-user


    【解决方案1】:

    请原谅,我看错了文档。 UserCreationForm 没有 get_user() 方法,而是在调用 save 方法时返回一个用户。我同意这个实施吗?不,但我认为这有助于首先限制方法的数量。

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多