在代理模型中添加GenericRelation

时间:2013-09-05 10:05:01

标签: django django-contrib

我在django 1.5.2中有一组模型,都使用GenericForeignKeyGenericRelation。问题是我也使用代理继承。泛型关系是Field,但不是DB字段,但在验证模型时,django会在代理继承的模型中看到Field并引发错误。

以下是我的问题的简化版本。有没有一个简单的解决方案可以让我只访问TaggableArticle中的标签?

from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType


class Tag(models.Model):
    tag = models.SlugField()
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')


class Article(models.Model):
    text = models.TextField()


class TaggableArticle(Article):
    tags = generic.GenericRelation(Tag)

    class Meta:
        proxy = True

结果是:

python manage.py validate            
FieldError: Proxy model 'TaggableArticle' contains model fields.
[1]    15784 exit 1     python manage.py validate

到目前为止我的想法:

  • django 1.6在泛型关系中引入了for_concrete_model标志,但我还没有看到这是否可以解决我的问题。我只是理解,如果关系在Article中,并且我希望能够使用正确的内容类型标记对象(Article vs TaggedArticle),它可以提供帮助。
  • 我可以删除关系,只是从另一个端点访问它(即`Tag.objects.filter(content_object = myTaggedArticle)或手动添加一个方法)但部分实现我整合了事实I&#39 ; m使用的是RelatedManager而不仅仅是普通的Manager,如果我来自整个TaggedArticle类,我就不会得到相关的经理。

Tkank you!

0 个答案:

没有答案