具有通用外键的中间表

时间:2014-08-05 16:47:29

标签: python django

我正在尝试用通用字段替换中间表中的字段。使用Django 1.6,MariaDB / MySQL。

我有一个类(PermissionGroup)将资源链接到一个组。工作良好。但是我有几个相似的表 - 将一些id链接到一个组ID。

我以为我可以用一个使用通用外键的表以及组ID替换这些表。但是这不会验证。

这是原作,有效:

# core/models.py
    class PermissionGroup(models.Model):
        resource = models.ForeignKey('core.Resource')
        group = models.ForeignKey('auth.Group')

    class Resource(models.Model):
        groups = models.ManyToManyField('auth.Group', through='core.PermissionGroup')


# auth/models.py
    class Group(models.Model):
        name = models.CharField(max_length=80, unique=True)

现在,尝试将PermissionGroup更改为使用GenericForeignKey:

# core/models.py
    class PermissionGroup(models.Model):
        content_type = models.ForeignKey('contenttypes.ContentType')
        object_id = models.PositiveIntegerField()
        content_object = generic.GenericForeignKey()
        group = models.ForeignKey('auth.Group')

    class Resource(models.Model):
        groups = models.ManyToManyField('auth.Group', through='core.PermissionGroup')

# auth/models.py
    class Group(models.Model):
        name = models.CharField(max_length=80, unique=True)

django模型验证现在失败了:

core.resource:'groups'是通过模型PermissionGroup手动定义的m2m关系,它没有组和资源的外键

这根本不可能,还是另一种方法来实现这个目标?

0 个答案:

没有答案