ManyToManyField присутствует в шаблоне? - PullRequest
1 голос
/ 12 октября 2009

У меня есть 03 модели book-> target_readers и книга имеет коллекцию.

class Book(models.Model):
    def __unicode__(self):
        return "%s (%s)" % (self.title, self.reference)
    reference = models.CharField(max_length=100)
    title = models.CharField(max_length=200)
    collection = models.ForeignKey(Collection)

class Collection(models.Model):
    def __unicode__(self):
        return self.name
                                       )
    name = models.CharField(max_length=200)
    target_readers = models.ManyToManyField(Target_Readers, blank=True, null=True)

class Target_Readers(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=200, verbose_name="target reader")

В моем шаблоне я делаю так, чтобы получить target_readers книги

{% for book in books %}
   {{ book.title }}
   {{ book.public_price }}
   {{ book.collection.target_readers.name }}

Но я не получаю никаких результатов для целевого читателя.

Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 12 октября 2009

Попробуйте:

{% for book in books %}
   {{ book.title }}
   {{ book.public_price }}
   {% for reader in book.collection.target_readers %}
       {{ reader.name }}
   {% endfor %}
{% endfor %}

target_readers - это не одна сущность, это список (хотя список, который может содержать только один элемент).

0 голосов
/ 23 марта 2013

Это решение сработало для меня:

{% for book in books %}
    {{ book.title }}
    {{ book.public_price }}
    {{ book.collection.target_readers.all|join:", " }}
{% endfor %}

То есть book.collection.target_readers.all возвращает список имен целевых читателей, а join:", " - это фильтр, который объединяет элементы списка с ",".

Примечание. В этом примере book.collection.target_readers.all возвращает список имен, поскольку вы возвращаете self.name в функции __unicode__(self) класса Target_Readers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...