在Django中设计组织特定模型的最佳方法?

foo*_*bar 6 django django-models relational-database

这是一个数据库模型设计问题.假设我正在设计像Slack这样的应用程序.Slack有多个组织,每个组织内都有对象,只有该组织才能访问(例如,聊天记录,文件等).在Django中设置这些每个组织对象的最佳方法是什么?

一个简单的解决方案是将ForeignKey附加到这些对象中的每一个.像这样:

class Organization(models.Model):
    # ...

class File(models.Model):
    organization = models.ForeignKey(
        'Organization',
        on_delete=models.CASCADE,
    )
    # ...

class ChatThread(models.Model):
    organization = models.ForeignKey(
        'Organization',
        on_delete=models.CASCADE,
    )
    # ...
Run Code Online (Sandbox Code Playgroud)

但是如果我们这样做,我们需要建立一个索引organization,并且因为有很多这样的每个组织对象,所以看起来有点浪费.

有没有更简洁的设计方法?

A. *_*arr 6

我认为你的方法和它需要的一样好.在索引组织列方面,您可以使用db_index=False禁用索引的创建.

如果要抽象组织字段并在所有组织对象上使用某些方法,则可以使用如下的抽象模型:

class Organization(models.Model):
    # ...

class OrganizationModel(models.Model):
    organization = models.ForeignKey(
        'Organization',
        on_delete=models.CASCADE,
        db_index=False,
    )

    class Meta:
        abstract = True

class File(OrganizationModel):
    # ...

class ChatThread(OrganizationModel):
    # ...
Run Code Online (Sandbox Code Playgroud)


小智 0

对我来说,真正的问题是:

您的文件模型是否始终需要组织?ChatThread 模型有同样的问题吗?

如果不是的话,你不应该使用ForeignKey,而应该使用ManyToManyField。然后你就可以避免模型依赖。

否则,你的模型是正确的。