Django вопрос типа контента - PullRequest
1 голос
/ 06 мая 2009

У меня проблема с типом контента. Я пытаюсь вытащить название из этой модели

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

Моя модель связывания выглядит следующим образом, в которой используется тип контента

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)

В шаблоне при звонке

{{ photo.get_root_title }}

Ничего не появляется ... и ничего не печатается .. что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 06 мая 2009

Ваш c является объектом класса, у него нет атрибута title.

То, что вы хотите - это объект, на который ссылаются как content_type, так и object_id - это то, что на самом деле называется родовое отношение , , как описано в Django docs . Чтобы использовать его, добавьте FK в свой Photo класс:

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

тогда вы можете просто использовать это свойство в своем шаблоне, используя {{ photo.content_object.title }}.

0 голосов
/ 06 мая 2009

Я не знаю, почему вы специально выбрали определение get_root_title, но обычно с ORM в Django я бы сделал это так

{{ photo.content_type.title }}

и вы легко получите заголовок

...