Django关系映射到GroupSettings

时间:2014-08-05 10:48:11

标签: python django foreign-key-relationship

我正在尝试将外部工具的自定义模型映射到一个组,以便我可以选择哪个组可以访问特定工具。我对这些关系映射很不满意。我该怎么做?

class ExternalTool(models.Model):
    url = models.CharField(max_length=200)
    name = models.CharField(max_length=20)
    allowed_for_groups = ????

class Group(models.Model):
... (django model)

我想这与外键,或者是个人关系,多种关系有关。因此,一个小组可以访问一个或多个外部工具。

1 个答案:

答案 0 :(得分:0)

可以为多个组提供外部工具吗?一个组可以访问多个外部工具吗?如果是这样,则ExternalToolGroup之间存在多对多的关系。

在数据库中,解决此问题的方法是使用桥接表。

[ ExternalTOol ] ---< [Bridge ] >--- [ Group ]

这意味着,您创建的桥表具有ExternalToolGroup的外键。在Django中,这转换为以下模型

class ExternalTool(models.Model):
    url = models.CharField(max_length=200)
    name = models.CharField(max_length=20)
    ...

class Group(models.Model):
    externaltools  = models.ManyToManyField(ExternalTool,
                          through="ExternalToolGroupMapping",
                          verbose_name="list of external tools",
                          related_name="groups")
    ...


class ExternalToolGroupMapping(models.Model):
    """ An intersection table between ExternalTool and Group """
    externaltool = models.ForeignKey(ExternalTool)
    group = models.ForeignKey(Group)
    ...

现在,您可以使用et.groups获取外部工具组列表(其中etExternalTool的实例。您可以获得使用g.externaltools群组外部工具列表(其中gGroup的实例)