我正在尝试将外部工具的自定义模型映射到一个组,以便我可以选择哪个组可以访问特定工具。我对这些关系映射很不满意。我该怎么做?
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)
我想这与外键,或者是个人关系,多种关系有关。因此,一个小组可以访问一个或多个外部工具。
答案 0 :(得分:0)
可以为多个组提供外部工具吗?一个组可以访问多个外部工具吗?如果是这样,则ExternalTool
和Group
之间存在多对多的关系。
在数据库中,解决此问题的方法是使用桥接表。
[ ExternalTOol ] ---< [Bridge ] >--- [ Group ]
这意味着,您创建的桥表具有ExternalTool
和Group
的外键。在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
获取外部工具组列表(其中et
是ExternalTool
的实例。您可以获得使用g.externaltools
的群组外部工具列表(其中g
是Group
的实例)