Django:测试一般关系content_object是什么类的方法?

时间:2010-05-06 15:00:23

标签: django class polymorphism

在我的项目中,我有一个类,NewsItem。 NewsItem的实例就像一个包装器。它们可以与ArtWork实例或Announcement实例相关联。

以下是NewsItem模型的外观:

class NewsItem(models.Model):   
 content_type = models.ForeignKey(ContentType)
 object_id = models.PositiveIntegerField()
 content_object = generic.GenericForeignKey('content_type', 'object_id')
 date = models.DateTimeField(default=datetime.datetime.now,)
 class Meta:
  ordering = ('-date',)
 def __unicode__(self):
  return (self.title())

在一个模板中,我正在处理一个NewsItem实例,并希望输出一些html它'包装'一个Artwork实例,如果它包装一个Announcement实例则输出一堆不同的html。有人可以解释我如何编写条件来测试它吗?

我的第一次天真尝试看起来像这样:

{% if news_item.content_object.type=='Artwork' %}do this{% else %}do that{% endif %}

1 个答案:

答案 0 :(得分:4)

您应该使用ForeignKey来存储此信息的content_type

{% if news_item.content_type.model == 'Artwork' %}