Pergunta

Eu tenho um problema que liga tipo de conteúdo. Eu estou tentando puxar um título a partir deste modelo

class TankProfile(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    tank_type = models.SmallIntegerField(max_length=1, choices=TANK_TYPE, db_index=True, default=1, verbose_name="Tank Type")
    ts = models.DateTimeField(auto_now=True)
    tsStart = models.DateTimeField(auto_now_add=True)
    tsEnd = models.DateTimeField(null=True, auto_now=False, blank=True)
    pic = models.CharField(max_length=25)
    slug = models.CharField(max_length=100)

    def __unicode__(self):
        return str(self.title)

    def get_title(self):
        return "%s" % self.title

Meu modelo de vinculação é o seguinte que usos contenttype

class Photo(models.Model):
    album = models.ForeignKey(Album)
    user = models.ForeignKey(User)
    content_type = models.ForeignKey(ContentType, related_name="content_type_set_for_%(class)s")
    object_pk = models.IntegerField(_('object ID'))
    server = models.CharField(max_length=20)
    dir = models.CharField(max_length=20)
    image = models.CharField(max_length=20)
    added = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=150)
    about = models.TextField()


    def get_root_title(self):

        c = ContentType.objects.get(id=self.content_type.id).model_class()
        print c.title

        return "Photos"

    def __unicode__(self):
        return str(self.id)

No modelo quando eu chamo

{{ photo.get_root_title }}

nada aparece .. e nada é impresso .. o que estou fazendo de errado?

Foi útil?

Solução

Seu c é um objeto de classe, ele não tem um title atributo.

O que você quer é um objeto que é referenciado por ambos content_type e object_id - isto é o que é realmente chamado relação genérica , , conforme descrito no docs Django . Para usá-lo, adicione o FK a sua classe Photo:

content_object = generic.GenericForeignKey('content_type', 'object_id')

então você pode apenas usar essa propriedade em seu modelo usando apenas {{ photo.content_object.title }}.

Outras dicas

Eu não sei por que você escolheu especificamente o get_root_title def mas normalmente com ORM do Django eu faria isso como este

{{ photo.content_type.title }}

e você facilmente obter o título

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top