Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中保存扩展用户创建表单中自定义添加的字段_Python_Django_Forms - Fatal编程技术网

Python 如何在django中保存扩展用户创建表单中自定义添加的字段

Python 如何在django中保存扩展用户创建表单中自定义添加的字段,python,django,forms,Python,Django,Forms,我是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

我是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})
我添加了标志,因为is正在检查表单的进度

我面临的问题是,我想保存使
用户键入的自定义字段

我不知道如何保存自定义字段,或者如果正在保存,如何获取值

更新:我打印了
用户。用户类型
。 作者:
def保存(self,commit=True):
user=super(SignUpForm,self).save(commit=False)
user.user\u type=self.cleaned\u数据['user\u type']

打印(user.user\u type)

Django的用户模型没有
user\u type
字段。如果希望
user\u type
字段成为Django用户模型的一部分。然后使用
AbstractUser
model并创建一个自定义用户模型

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    user_type = models.CharField(max_lenght=20, choices=usertypes)

现在在创建表单时使用此自定义模型。

您在
self.cleaned_数据['user_type']
?@HigorRossato
usertypes=[('customer','customer'),('seller','seller'),]
如果你问的是这样的话。否则我一点线索也没有。在你的
注册表单中
你覆盖了
保存
方法。在该方法中,您正在调用
self.cleaned\u data['user\u type']
。你能打印吗?@HigorRossato是的,可以打印。当客户被选为卖家类型时,它正在打印客户。我已经在问题的末尾添加了屏幕截图。好的,我会尝试一下。我刚刚回到这个。。。创建一个AbstractUser会导致许多开放端出现save不起作用,Django管理员无法处理请求。。etc(不建议初学者使用)。另一种方法是在另一个用户中使用外键,并将额外的数据存储在那里。一旦用户完成创建帐户,将其重定向到另一个表单。