Как я могу создать два типа пользователей в Django?

Я создаю проект, в котором у меня есть два типа учетных записей. Один - это пользователь по умолчанию (который использует обычные параметры), а другой - это учетная запись для предприятий. На самом деле модель кажется самой сложной частью.

Кроме того, в будущем я хотел бы добавить некоторые поля, которых нет в обычной модели пользователя (например, кредитная карта, сектор...), мне нужен хороший способ создания учетной записи с использованием обычных полей пользователя, которые можно было бы обновлять.

forms.py

class Business_RegisterForm(forms.ModelForm):
    email = forms.CharField(max_length=30)
    password = forms.CharField(max_length=30)

    def clean(self):
        cleaned_data = super(Business_RegisterForm, self).clean()
        
        email = cleaned_data.get('email')
        password = cleaned_data.get('password')
    
    class Meta:
        model = BusinessModel
        fields = [
            'email',
            'password',
        ]

views.py

def Business_RegistrationView(request):
    if request.method == 'POST':
        form = Business_RegisterForm(request.POST)
        if form.is_valid():
        \# clean data
            email = form.cleaned_data\['email'\]
            password = form.cleaned_data\['password'\]

            # user creation
            BusinessModel.objects.create_business(
                email=email,
                password=password
            )
    
            # user auth **credentials
            business = authenticate(
                email=email,
                password=password
            )
            
            # save the model
            business.save()
            form.save()
    
            # login after saved 
            login(request, business)
            
            # redirect to home
            return HttpResponseRedirect('/')  
    else:
        # Request's Error
        print("The POST request has failed.")
        form = Business_RegisterForm()

urls.py

path('business-registration/', Business_RegistrationView, name='business-registration'),

models.py

class BusinessModel(models.Model):
    email = models.OneToOneField(User, on_delete=models.CASCADE, related_name='business_email')
    password = models.OneToOneField(User, on_delete=models.CASCADE, related_name='business_password')

    # BELOW Changes in Admin panel
    class Meta:
        verbose_name = "Business Account"
        verbose_name_plural = "Businesses Accounts"
    
    def __str__(self):
        return self.email

Я пробовал много раз, но все они не сработали. Я создал модель, которая рендерит поля из модели User, но это не работает вообще, и поэтому я создал модель с нуля, но это не кажется правильным способом действовать.

Есть ли способ создать учетную запись Бизнес, не начиная с нуля, и используя те же поля модели User?

Вы можете наследовать от AbstractUser: https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#substituting-a-custom-user-model

Внутри новой User модели можно сохранить тип пользователя.

Что-то вроде этого:

# models.py
class User(AbstractUser):
    TYPE_BUSINESS = 'BUSINESS'
    TYPE_REGULAR_USER = 'USER'
    USER_TYPES = ((TYPE_BUSINESS, 'Business'), (TYPE_REGULAR_USER, 'User'))

    user_type = models.CharField(max_length=10, choices=USER_TYPES)
# views.py
def Business_RegistrationView(request):
    if request.method == 'POST':
        # create your user
        # then assign them the correct type
        user.user_type = User.TYPE_BUSINESS
        user.save()

Затем вы можете проверить, является ли пользователь правильным типом, где угодно:

if user.user_type == User.TYPE_BUSINESS:
    # user is a business
Вернуться на верх