我正在制作一个注册表格供用户使用 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)
Run Code Online (Sandbox Code Playgroud)
这是 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)
Run Code Online (Sandbox Code Playgroud)
追溯
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'
Run Code Online (Sandbox Code Playgroud)
一些附加信息 我指的是这个博客来创建 AbstractUser https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#abstractuser
您正在调用is_valid该User对象,但这不是您在 User 上定义的方法(或者已经存在于 AbstractUser 上)。如果您仔细查看您的教程,他们实际上是在UserForm. 表单有一个内置is_valid方法,用于确保提交的所有表单数据都是有效的(有效手段可能因您的用例而异......也许您正在确保所有内容都已填写,或者某些内容是真实的电子邮件地址,或者某个日期在未来六个月以上)。
你的代码说:
form1=User(request.POST or None)
if form1.is_valid():
form1.save()
看起来您打算定义form1为表单对象(否则这可能是有史以来最糟糕的变量名)。您UserForm的forms.py. 你会想要导入它,并像这样实例化它:
form1 = UserForm(request.POST, instance=request.user)
https://docs.djangoproject.com/en/2.0/ref/forms/validation/
(旁注:当你一年后回到你的代码时,你会记得form1应该是什么意思吗?试着给你的变量命名一些可以解释自己的user_form东西——或类似的东西)
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |