Django中的数据库表设计混淆

时间:2013-09-30 07:03:38

标签: django database-design django-models

系统概述:

在我的系统中,客户端可以注册应用程序,然后客户端可以创建角色并使用定义的角色创建用户。因此,一个客户端可以拥有许多用户。

我创建了一个与用户相关的客户端模型。

class Client(models.Model):

    user = models.OneToOneField(User)

    # True if the signed up user is client
    is_client = models.BooleanField(default=True)   

    # Which company the client represents
    company = models.CharField(max_length=200, null=True)

    # Address of the company
    address = models.CharField(max_length=200, null=True)

但我认为这是一种错误的做法。因为当我想列出某些客户的用户时,我不能这样做。另外,我应该在哪里存储用户角色?我是否必须修改 auth_permission 表。感谢

1 个答案:

答案 0 :(得分:0)

您需要为用户添加ForeignKey()关系而不是OneToOne。为此,您可以扩展django的User模型或创建自己的用户配置文件类。

要在User模型中扩展和添加属性,请参阅Extending User model


如果你想使用django的内置User模型和身份验证等,更好的方法是......

  1. 在您的应用中创建用户个人资料模型,与OneToOne保持User的关系。

  2. 在此用户个人资料模型中,添加有关用户的特定信息以及与其他模型的关系。您可以在此类中设置角色,并且与ForeignKey()模型具有Client关系,因为您希望客户拥有许多用户。

    类UserProfile(models.Model):     client = models.ForiegnKey('Client')     ...

  3. 每当创建新用户时,为用户创建UserProfile实例。

  4. 之前,django使用user.get_profile()方法获取用户的用户个人资料对象,但在1.5.1中已弃用。