Django中的多个用户类型

时间:2017-03-06 08:28:08

标签: python django

我是Django的新手并尝试使用两种用户类型(自由职业者和客户)创建应用程序。我了解如何创建用户配置文件类,它适用于我:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    description = models.CharField(max_length=100, default='')
    country = models.CharField(max_length=100, default='')
    website = models.URLField(default='')
    phone = models.IntegerField(default=0)

def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])


post_save.connect(create_profile, sender=User)

这适用于一个用户类型的用户。但是现在我正在构建一个拥有两种类型用户(自由职业者和客户)的应用程序,完成这项工作的最佳方法是什么。两个用户都将拥有不同的视图和信息。我应该:

  1. 创建2个不同的应用程序,并重复正常注册并登录每个应用程序。
  2. 如果我这样做,希望登录时自由职业者不会访问客户视图。
  3. 如果我决定为其使用一个应用和模型,如何将用户类型添加到用户个人资料。 我需要一步一步的初学者方法,或相关来源的链接。 感谢。

3 个答案:

答案 0 :(得分:2)

您应该只需要使用Groups Django机制 - 您需要创建两个组freelancer并说出common并检查用户是在第一组还是第二组 - 然后向他显示图

要检查用户是否在群组中,您可以使用

User.objects.filter(pk=userId, groups__name='freelancer').exists()

答案 1 :(得分:0)

你可以试试这个:

class UserProfile(models.Model):
    user = models.ForeignKey(User)
    #define general fields

class Freelancer(models.Model):
    profile = models.ForeignKey(UserProfile)
    #freelancer specific  fields

    class Meta:
        db_table = 'freelancer'

class Customers(models.Model):
    profile = models.ForeignKey(UserProfile)
    #customer specific fields 

   class Meta:
        db_table = 'customer'

然后,您可以从UserProfile中获得任意数量的用户。

答案 2 :(得分:0)

您可以尝试像这样扩展默认的Django Auth用户 使用帐户或您喜欢的任何名称创建一个应用,然后在models.py中输入如下内容

class User(AbstractUser):
is_head = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_public = models.BooleanField(default=False)

在Settings.py中添加Auth扩展模型

AUTH_USER_MODEL = 'accounts.User'

迁移您的“帐户”应用后,您都已经设置了“用户扩展模型”。