Django中的数据库表设计混乱

Django中的数据库表设计混乱,django,database-design,django-models,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)

系统概述:

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

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

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)

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

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

要在
用户
模型中扩展和添加属性,请参阅


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

  • 在应用程序中使用
    OneToOne
    user
    的关系创建用户配置文件模型

  • 在此用户配置文件模型中,添加有关用户以及与其他模型的关系的特定信息。您可以在此类中设置角色,并与
    Client
    模型建立
    ForeignKey()
    关系,因为您希望一个客户端有多个用户

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

  • 每当创建新用户时,为用户创建
    UserProfile
    实例

  • 早些时候,django使用
    user.get_profile()
    方法为用户获取用户配置文件对象,但在1.5.1中,该方法已被弃用


  • 我想实施你的第二种方法。但是与其创建另一个模型
    userProfile
    ,我就不能假设
    Client
    userProfile
    @user2032220,你希望一个客户端有很多用户,那么你不能用
    Client
    作为
    userProfile
    好的,谢谢。但是如果我做了
    user=models.ForeignKey(user)
    ,就可以正确地完成,而不是
    OnetoOne