Как я могу создать два типа пользователей в 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