无法将关键字“content_type”解析为字段

时间:2016-09-13 13:54:55

标签: django

我正在尝试使用泛型关系,我的模型看起来像这样:

class Post(models.Model):
    # Identifiers
    user = models.ForeignKey(User, unique=False, related_name = 'posts')
    # Resource
    resource_type = models.ForeignKey(ContentType)
    resource_id = models.PositiveIntegerField()
    resource = GenericForeignKey('resource_type', 'resource_id')

    # Other
    date_created = models.DateTimeField(auto_now=False, auto_now_add=True, blank=True)

    class Meta:
         unique_together = ('resource_type', 'resource_id',)

但是,当我在我的资源上尝试获取Post对象时,使用“SomeResource.posts”会发生以下异常:

  

无法将关键字'content_type'解析为字段。选择是:   date_created,id,resource,resource_id,resource_type,   resource_type_id,user,user_id

当我在content_type上明确命名resource_type时,为什么要查找GenericForeignKey

2 个答案:

答案 0 :(得分:3)

我现在无法在文档中的任何位置看到它,但如果您查看GenericRelation的来源,则在创建content_type_fieldobject_id_field时会有关键字。因此,如果您将关系创建为GenericRelation(object_id_field='resource_id', content_type_field='resource_type'),那么它应该查找正确的字段。

我发现如果你在一个模型中有多个GenericForeignKey's,那么这是特别必要的,因此不能使用默认名称。

您可以在此处查看1.11的来源:https://github.com/django/django/blob/stable/1.11.x/django/contrib/contenttypes/fields.py#L291

答案 1 :(得分:0)

您是否有使用'资源'的具体原因?而不是'内容' /'对象' ?

如果没有,我建议改变与这样的通用关系相关的所有3行(以及Meta):

 content_type = models.ForeignKey(ContentType)
 object_id = models.PositiveIntegerField()
 content = GenericForeignKey('content_type', 'object_id')

我总是坚持使用这些字段名称来表示通用关系(基于the documentation),即使文档提到了重命名' content_type'和' object_id' (也许只有'内容'必须保持不变......)。我在Django中不够好解释为什么会这样做。

希望它是可行的,适用于您的项目