Django管理员是否可以配置为使用继承模型的基本模型id保存通用内容类型?
我正在使用Django 1.3 我有一个名为BasicPost的基本模型(不是抽象模型)。我有一个从中继承的模型,叫做PostWithImage。BasicPost有几个通用关系 在models.py中:Django管理员是否可以配置为使用继承模型的基本模型id保存通用内容类型?,django,inheritance,django-admin,Django,Inheritance,Django Admin,我正在使用Django 1.3 我有一个名为BasicPost的基本模型(不是抽象模型)。我有一个从中继承的模型,叫做PostWithImage。BasicPost有几个通用关系 在models.py中: class BasicPost(models.Model): ... authors = generic.GenericRelation(OrderedCredit, verbose_name=_('authors'), blank=True, null=True) .
class BasicPost(models.Model):
...
authors = generic.GenericRelation(OrderedCredit,
verbose_name=_('authors'), blank=True, null=True)
...
tags = generic.GenericRelation(TaggedItem, verbose_name=_('tags'),
blank=True, null=True)
...
class PostWithImage(BasicPost):
...
在admin.py中:
class TaggedItemInline(generic.GenericTabularInline):
...
model = TaggedItem
...
class OrderedCreditInline(generic.GenericTabularInline):
... # same concept as above
class BasicPostAdmin(admin.ModelAdmin):
inlines = [OrderedCreditInline, TaggedItemInline]
class PostWithImageAdmin(BasicPostAdmin):
...
当我在PostWithImage管理屏幕上保存对象时,它会将我的通用字段的内容类型设置为PostWithImage。但是,如果我现在想检索所有带有特定标记的帖子(不管它们是BasicPost、PostWithImage还是任何其他类型的帖子),我会遇到问题。没有简单的查询可以做到这一点,因为标记指向一组不同的模型。我已经找到了一个解决办法,但它非常难看(见下文)
我的问题是:是否有一种方法可以强制管理接口保存内容类型指向基类(即BasicPost)的标记?
这是一个丑陋的解决办法。程序员很难破译
我怀疑它会产生非常昂贵的数据库点击量
class BasicPost(models.Model)
# This code uses model_utils select_subclasses method
def get_related_posts(self):
tags = self.tags.all()
return BasicPost.objects.filter(
pk__in=
[t.object_id for t in
TaggedItem.objects.filter(tag__name__in=[t.tag.name for t in tags])
if isinstance(t.content_type.model_class()(), BasicPost)])\
.select_subclasses().order_by('-date_published')
如果它不是抽象的,那么你可能不得不用肮脏的方式来做。Django文档显示,如果使用一对多链接,基本上可以查询所有内容。因为事实并非如此,肮脏的方式可能是唯一的方式。我还没有用足够的Django来马上说出来 我建议你看看django的书 这本书包罗万象。一个月前,当我编写django服务器时,这成为了我的一站式参考
我希望这能有所帮助。如果不是抽象的,你可能不得不用肮脏的方式来做。Django文档显示,如果使用一对多链接,基本上可以查询所有内容。因为事实并非如此,肮脏的方式可能是唯一的方式。我还没有用足够的Django来马上说出来 我建议你看看django的书 这本书包罗万象。一个月前,当我编写django服务器时,这成为了我的一站式参考 我希望这有帮助