Python 表单字段未存储在Django用户模型中
我有一份我在下面定义的报名表 forms.pyPython 表单字段未存储在Django用户模型中,python,django,Python,Django,我有一份我在下面定义的报名表 forms.py from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm from django import forms class SignUpForm(UserCreationForm): display_name = forms.CharField(max_length=30, required=True,
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms
class SignUpForm(UserCreationForm):
display_name = forms.CharField(max_length=30, required=True, help_text='Please provide a display name for your profile')
class Meta:
model = User
fields = ('username', 'password1', 'password2', 'display_name')
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from .forms import SignUpForm
from django.shortcuts import render, redirect
@csrf_exempt
def signup_users(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data.get('username')
display_name = form.cleaned_data.get('display_name')
raw_password = form.cleaned_data.get('password1')
user.set_password(raw_password)
user.display_name = display_name
user.save()
user = authenticate(username=username, password=raw_password)
print("signup authencticate", user)
login(request, user)
return render(request, 'index.html')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
在views.py中,我处理注册过程
视图.py
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms
class SignUpForm(UserCreationForm):
display_name = forms.CharField(max_length=30, required=True, help_text='Please provide a display name for your profile')
class Meta:
model = User
fields = ('username', 'password1', 'password2', 'display_name')
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from .forms import SignUpForm
from django.shortcuts import render, redirect
@csrf_exempt
def signup_users(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data.get('username')
display_name = form.cleaned_data.get('display_name')
raw_password = form.cleaned_data.get('password1')
user.set_password(raw_password)
user.display_name = display_name
user.save()
user = authenticate(username=username, password=raw_password)
print("signup authencticate", user)
login(request, user)
return render(request, 'index.html')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
用户能够成功注册,但是他们的display\u name
没有存储在django用户模型中。即使在django管理员中,我也没有看到display\u name
。我甚至执行了类似serializers.serialize(“json”,user.objects.filter(username=username))的查询
但即使在这里,它也会显示除显示名称以外的所有其他字段
我做错了什么?很简单,
django.contrib.auth.models.User
模型没有名为display\u name
的字段,因此它当然不会被保存。如果您想向您的用户模型添加字段,您必须。很简单,django.contrib.auth.models.User
模型没有名为display\u name
的字段,因此它当然不会被保存。如果要向用户模型中添加字段,则必须。显示名称不是用户模型的列。那么它应该存储在哪里呢?如果您想构造一个额外的表等,您需要更改用户模型。display\u name
不是user
模型的一列。那么它应该存储在哪里呢?如果你想构造一个额外的表,你需要更改用户模型,等等。哦,我现在明白了。有什么方法可以向现有的Django用户模型添加一个新字段吗?@SouvikRay实际上是的,但这比提供你自己的模型要复杂得多(如我链接到的文档中所述)它会吓坏任何django程序员,而且它保证会以某种方式崩溃。你的选择哦,我现在明白了。有什么办法可以给现有的Django用户模型添加一个新字段吗?@SouvikRay实际上是的,但这比提供你自己的模型要复杂得多(正如我链接到的文档中所解释的那样),这会让任何Django程序员感到害怕,而且保证会以某种方式破坏它。你的选择