Django - Multiple User Profiles

前端 未结 3 460
小鲜肉
小鲜肉 2021-01-29 21:27

Initially, I started my UserProfile like this:

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

class UserProfile(models.Model):
    use         


        
3条回答
  •  借酒劲吻你
    2021-01-29 21:42

    You can do this in following way. Have a profile which will contains common fields which are necessary in both profiles. And you have already done this by creating class UserProfile.

    class UserProfile(models.Model):
        user = models.ForeignKey(User)
        # Some common fields here, which are shared among both corporate and individual profiles
    
    class CorporateUser(models.Model):
        profile = models.ForeignKey(UserProfile)
        # Corporate fields here
    
        class Meta:
            db_table = 'corporate_user'
    
    class IndividualUser(models.Model):
        profile = models.ForeignKey(UserProfile)
        # Individual user fields here
    
       class Meta:
            db_table = 'individual_user'
    

    There is no rocket science involved here. Just have a keyword which will distinguish between corporate profile or individual profile. E.g. Consider that the user is signing up. Then have a field on form which will differentiate whether the user is signing up for corporate or not. And Use that keyword(request parameter) to save the user in respective model.

    Then later on when ever you want to check that the profile of user is corporate or individual you can check it by writing a small function.

    def is_corporate_profile(profile):
        try:
            profile.corporate_user
            return True
        except CorporateUser.DoesNotExist:
            return False
    
    # If there is no corporate profile is associated with main profile then it will raise `DoesNotExist` exception and it means its individual profile
    # You can use this function as a template function also to use in template
    {% if profile|is_corporate_profile %}
    

    Hope this will lead you some where. Thanks!

提交回复
热议问题