首页 > 解决方案 > 如何在 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)

标签: pythondjangoforms

解决方案


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)

现在使用这个自定义模型,同时创建一个您的表单。


推荐阅读