【问题标题】:Django QuerySet in template for relational models关系模型模板中的 Django QuerySet
【发布时间】:2016-11-19 14:22:12
【问题描述】:

我正在尝试在 django 中使用 FK 与另一个模型建立关系,但我无法在 django 模板中调用与 FK 相关的模型字段。在模板中,当我调用“provider.name”时,结果显示“无”。我确实列出了 5 个不同的供应商,可以从管理员那里看到。我有供应商,我得到了如下产品:

class Product(models.Model):
    title = models.CharField(max_length=500)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(max_digits=20, decimal_places=2)
    sku = models.CharField(null=True, max_length=100)
    url = models.URLField(blank=True)
    slug = models.SlugField(unique=True)
    providers = models.ManyToManyField('Provider', blank=True)

    def __unicode__(self):
        return self.title

   class Provider(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField(null=True, blank=True)
    logo = models.ImageField(upload_to='products/')
    shipping_method = models.CharField(max_length=250)
    shipping_time = models.CharField(max_length=250)
    return_policy = models.CharField(max_length=200)
    free_delivery = models.CharField(max_length=200)
    customer_service_number = models.CharField(max_length=200)
    shipping_charges = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name

在模板中我称之为:

{% with provider=object.providers %}
{{ provider.name }}
{% endwith %}

结果显示"None"。我正在尝试在不同的模板中调用提供者。在它自己的列表/详细信息通用视图中,它工作得很好。我试图在不同的应用程序模板中调用它。请指教。

更新........

我的 search.html for whoosh 搜索引擎包括

{% for result in page.object_list %}
            <div class="col-lg-1-5  col-md-3 col-sm-4 col-xs-12">
            <div class="pbox">
              <div class="photo">
                <a href="{{ result.object.get_absolute_url }}"><img src="{{ result.object.get_image_url }}" alt="product"></a>
              </div>
              <div class="info">
                <div class="url">
                name
                    {% for item in result.object.providers.all %}
                        {{ result.provider.name }}
                    {% endfor %}

                </div>
                <div class="description">
                  {{ result.object.description|truncatewords:7 }}
                </div>
                <div class="price">
                  {{ result.object.price|intcomma }}
                </div>
              </div>
            </div>
          </div>

因为我没有使用任何 ModelManager 或仅使用为模型预定义的默认管理器。我在 Product App 模型下添加了一行代码,如下所示:

def get_provider(self):
        item = self.providers.all()
        return item

【问题讨论】:

    标签: python django django-templates django-template-filters


    【解决方案1】:

    如果调用provider,你会调用相关的经理,所以它返回None,因为经理没有这样的方法。
    如果你想从管理者那里获取对象,你应该调用self.providers.all()
    在您的情况下,模板标签应如下所示:

    {% for item in object.providers.all %}
        {{ provider.name }}
    {% endfor %}
    

    【讨论】:

    • 我试过这个,但由于我现在没有使用任何管理器,所以在“产品”应用程序下,我为 get_provider 添加了一个函数,我只是返回了 self.providers.all()。我也在用我的模板更新问题。我正在实现 whoosh 搜索引擎代码,所以在它的 search.html 中你可以看到我是如何列出代码的。
    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多