【问题标题】:'User' object has no attribute 'is_valid' Django'用户'对象没有属性'is_valid' Django
【发布时间】:2018-08-09 23:06:20
【问题描述】:

我正在为使用 Django 1.8 和 python 3.5 注册的用户制作注册表

我创建了一个用户(使用扩展 AbstractUser 的自定义模型扩展用户模型)(即,我想将自定义字段添加到默认 django 的用户表中,例如简历、出生日期等)

这是我的mainpage/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

这是signup/view.py

from django.shortcuts import render
from mainpage.models import User
def signup(request):
    form1=User(request.POST or None)
    if form1.is_valid():
        form1.save()
    context = {
    "form1": form1,
 }
return render(request, "signup.html",context)

追溯

Environment:


Request Method: GET
Request URL: http://localhost:8000/signup/

Django Version: 1.8
Python Version: 3.5.4
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'mainpage',
 'signup',
 'login',
 'currency',
 'rest_framework',
 'corsheaders')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "C:\Users\vaibhav2\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\vaibhav2\PycharmProjects\MajorProject\src\signup\views.py" in signup
  12.     if form1.is_valid():

Exception Type: AttributeError at /signup/
Exception Value: 'User' object has no attribute 'is_valid'

一些附加信息 我指的是这个博客创建 AbstractUser https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#abstractuser

【问题讨论】:

  • 你是不是在想表单上的is_valid()方法,用来验证提交的信息是否完整准确?
  • 我在我的问题中指出了我的错误,但不知道如何解决它,请参阅问题
  • 修复它的方法是定义一个表单。为什么不清楚?
  • @DanielRoseman 你比他们更有经验!这对新手来说可能很棘手!

标签: python django


【解决方案1】:

您在User 对象上调用is_valid,但这不是您在用户上定义的方法(或者在AbstractUser 上已经存在)。如果您仔细查看您的教程,他们实际上是在UserForm 上调用它。表单有一个内置的 is_valid 方法,用于确保提交的所有表单数据都是有效的(有效的方法可能会根据您的用例而有所不同......也许您正在确保所有内容都已填写,或者某些内容是真实的电子邮件地址,或者某个日期在未来六个月以上)。

你的代码说:

form1=User(request.POST or None) if form1.is_valid(): form1.save()

意味着form1 定义为表单对象(否则这可能是有史以来最糟糕的变量名称)。您的forms.py 中可能有一个名为UserForm(或类似名称)的东西。您需要导入它,并像这样实例化它:

form1 = UserForm(request.POST, instance=request.user)

https://docs.djangoproject.com/en/2.0/ref/forms/validation/

(旁注:当你一年后回到你的代码时,你会记得form1 应该是什么意思吗?试着给你的变量命名一个可以解释自己的东西——user_form 或类似的东西)

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2020-03-10
    • 2011-12-14
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    相关资源
    最近更新 更多