2010-05-06 8 views
1

Dans mon projet, j'ai un cours, NewsItem. Les instances de NewsItem agissent comme un wrapper. Ils peuvent être associés à une instance ArtWork ou à une instance d'annonce.Django: moyen de tester quelle classe est une relation générique content_object?

Voilà comment le modèle NewsItem ressemble:

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())

Dans un modèle que je traite une instance NewsItem, et souhaite produire un certain groupe de HTML, il lui est « emballage » une instance de l'œuvre, et un tas différent de html s'il encapsule une instance d'annonce. Quelqu'un pourrait-il expliquer comment je peux écrire un conditionnel pour tester cela?

Mon premier essai naïf ressemblait à ceci:

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

Répondre

3

Vous devez utiliser le ForeignKey à content_type, qui stocke ces informations.

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

Ah si simple! Merci beaucoup. – bitbutter