django模型中的冲突。怎么调试?

时间:2011-06-12 12:17:47

标签: django

这是我得到的错误。

   auth.permission: Accessor for field 'content_type' clashes with related field 'ContentType.permission_set'. Add a related_name argument to the definition for 'content_type'.
    permissions.permission: Accessor for field 'table' clashes with related field 'ContentType.permission_set'. Add a related_name argument to the definition for 'table'.

这是我的模特。

from django.contrib.gis.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from maps.models import  Sdr_Layer

class Permission(models.Model):
    user = models.ForeignKey(User)
    table = models.ForeignKey(ContentType)
    permi = models.IntegerField()

有人可以向我解释错误的含义以及如何删除错误吗?

1 个答案:

答案 0 :(得分:2)

问题在于,当您创建ForeignKey链接到另一个模型时,会在该模型上自动创建一个向后关系。在您permissions.Permission的情况下,ForeignKeyContentType意味着将有一位经理添加到名为ContentType的{​​{1}},允许访问permission_set链接到它的对象。

它不起作用的原因是,后向关系管理器permissions.Permission是应该引用您的permission_set模型还是内置permissions.Permission模型,这是不明确的。 (两者都有auth.PermissionForeignKey,因此为两者创建了一个向后关系管理器。)

要解决此问题,您必须使用ContentType参数related_name。这允许您使用自己的名称覆盖默认的ForeignKey名称。 e.g:

FOO_set