How can I create two user type in Django?
I'm creating a project, where I've two types of account. One is the default User (that use the normal params), and another one that is the account for businesses. Actually the model seem to be the hardest part.
Also, in the future, I would like to add some fields that the normal User model doesn't have (like credit card, sector,...), I need a good way to create the account using the normal User fields that could be updated.
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', ]
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()
path('business-registration/', Business_RegistrationView, name='business-registration'),
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
I've tried many times but all of'em didn't worked. I created a model that render the fields from the User model but doesn't work at all, and therefore I've made a model from scratch but doesn't seem the right way to proceed.
Is there any way to create the account Business without starting from scratch, and using the same fields of the User model?
You can inherit from
Inside the new
User model, you can then keep the type of user.
Something like this:
# 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()
You can then check if the user is of the correct type wherever you like:
if user.user_type == User.TYPE_BUSINESS: # user is a business