【问题标题】:ManyToManyField present in template?模板中存在ManyToManyField?
【发布时间】:2009-10-12 11:33:50
【问题描述】:

我有 03 个模型 book->target_readers 和 book 有收藏。

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

在我的模板中,我这样做是为了获得本书的目标读者

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

但我没有得到目标读者的任何结果。

有人知道我该怎么做吗?

【问题讨论】:

  • 为什么投反对票?这是一个措辞清晰,可以回答的问题。来自我的 +1。
  • PS - 作为记录,django 模板基本上会忽略“不正确”标签或具有不可打印值的标签,因此它不会在 {{ book.collection.target_readers.name }} 上抛出错误,而是跳过它.我相信您可以通过在 settings.py 文件中设置 TEMPLATE_DEBUG 来告诉它抛出错误。更多信息:docs.djangoproject.com/en/dev/ref/settings/#template-debug

标签: django django-templates


【解决方案1】:

试试:

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

target_readers 不是一个单一的实体,它是一个列表(虽然它可能只包含一个元素)。

【讨论】:

  • 我认为应该是:对于 book.collection.target_readers.all 中的读者
【解决方案2】:

这个解决方案对我有用:

{% 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 返回名称列表,因为您在 Target_Readers 类的 __unicode__(self) 函数中返回 self.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 2012-07-04
    • 2019-08-07
    • 1970-01-01
    • 2014-11-22
    • 2013-06-11
    • 2011-01-10
    相关资源
    最近更新 更多