python - 如何在 django 的扩展用户创建表单中保存自定义添加的字段
问题描述
我对 Django 很陌生,我通过在 Django 中扩展 UserCreationForms 制作了一个自定义注册表单。
class SignUpForm(UserCreationForm): #This class will be used in views of account to make sigupform
user_type = forms.CharField(required=True,widget=forms.Select(choices=usertypes))
email = forms.CharField(max_length=254, required=True, widget=forms.EmailInput())
class Meta:
model = User
fields = ['username', 'user_type','email','password1','password2']
def save(self,commit=True):
user = super(SignUpForm, self).save(commit=False)
user.user_type = self.cleaned_data['user_type']
print('Flag3')
if commit:
user.save()
return user
它与视图工作正常:
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
print('Flag0')
if form.is_valid():
user = form.save()
if user.user_type == 'Seller' or user.user_type=='seller':
print('Flag1')
auth_login(request, user)
print('Flag2')
print(user.user_type)
group = Group.objects.get(name='Seller')
print(group.name)
print('Flag3')
user.groups.add(group)
return redirect('get_seller')
if user.user_type == 'Customer' or user.user_type=='customer':
print('Flag1')
auth_login(request, user)
print('Flag2')
print(user.user_type)
group = Group.objects.get(name='Customer')
print(group.name)
print('Flag3')
user.groups.add(group)
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
我添加了标志,因为它正在检查表单的进度。
我面临的问题是我想保存制作的自定义字段user_type
。
我不知道如何保存自定义字段,或者是否正在保存如何获取值。
更新:我打印了user.user_type
.
经过 :
def save(self,commit=True):
user = super(SignUpForm, self).save(commit=False)
user.user_type = self.cleaned_data['user_type']
print(user.user_type)
解决方案
Django 的用户模型没有user_type
字段。如果您希望user_type
字段成为 Django 用户模型的一部分。然后使用AbstractUser
模型并创建自定义用户模型。
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
user_type = models.CharField(max_lenght=20, choices=usertypes)
现在使用这个自定义模型,同时创建一个您的表单。
推荐阅读
- reactjs - 如何在生产中使用电子、反应和电子生成器显示图像
- html - Html和CSS如何使具有悬停效果的图像成为超链接
- unity3d - unity 在同一位置实例化多个对象。我想把它们散开
- python-3.x - 通过使用 parse_qs 监听来捕获 cookie
- javascript - WordPress 中的轮播问题(店面主题)
- android - 如何更改应用程序的基色
- reactjs - 在没有 Dispatch 函数的情况下在 React 上使用操作是否正确?
- android - 显示布局边界不显示在撰写布局上
- c# - 如何在表单中知道在用户控件中单击的按钮的名称
- arrays - 比较C中的空值和NULL