Django中的用户级别注册

时间:2020-08-29 04:51:55

标签: python django

我正在尝试在Django中创建两个用户级别。他们注册时会看到一个下拉字段,可以在其中选择是客户还是司机。

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    is_customer = models.BooleanField(default=False)
    is_driver = models.BooleanField(default=False)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    address = models.CharField(max_length=300)
    contact_no = models.CharField(max_length=11)
    profile_pic = models.ImageField(blank=True, null=True)

    def __str__(self):
        return self.user.username

views.py

def RegisterPage(request):
    form = RegisterForm()

    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
    context = {'form':form}
    return render(request, 'accounts/register.html', context)

forms.py

from django.contrib.auth.forms import UserCreationForm
from .models import *
from django import forms
from django.db import transaction

class RegisterForm(UserCreationForm):
    email = forms.EmailField()
    first_name = forms.CharField(max_length=60)
    last_name = forms.CharField(max_length=150)
    address = forms.CharField(max_length=300)
    contact_no = forms.CharField(max_length=11)
    profile_pic = forms.ImageField(required=False)
    

    LEVELS = (
        ('Customer', 'Customer'),
        ('Driver', 'Driver'),
        )

    user_level = forms.ChoiceField(choices=LEVELS)


    class Meta(UserCreationForm.Meta):
        model = User
        fields = ['username', 'email', 'first_name', 'last_name',
                  'password1', 'password2', 'address', 'contact_no',
                  'profile_pic', 'user_level']

    @transaction.atomic
    def save(self, commit=True):
        user = super().save(commit=False)
        level = self.cleaned_data.get('user_level')
        if level == 'Customer':
            user.is_customer = True
            if commit:
                    user.save()
        elif level == 'Driver':
            user.is_driver = True
            if commit:
                    user.save()
        profile = Profile.objects.create(user=user)
        profile.address = self.cleaned_data.get('address')
        profile.contact_no = self.cleaned_data.get('contact_no')
        profile.profile_pic = self.cleaned_data.get('profile_pic')
        
        profile.save()
        
        return user

我已经将用户模型注册到Django设置中。我的问题是,当我在管理页面中检查它时,它不会保存到用户模型。似乎是什么问题?

0 个答案:

没有答案