简体   繁体   English

关系模型模板中的Django QuerySet

[英]Django QuerySet in template for relational models

I am trying to setup a relation with another model using FK in django but I can't call FK related model fields in django templates. 我正在尝试在Django中使用FK与另一个模型建立关系,但是我无法在Django模板中调用FK相关模型字段。 In template when I call "provider.name" it shows me "None" as result. 在模板中,当我调用“ provider.name”时,结果显示为“ None”。 I do have 5 different suppliers listed and can see from admin. 我确实列出了5个不同的供应商,可以从管理员那里看到。 I have providers and I got products like below: 我有供应商,并且得到的产品如下:

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

In template the way I am calling it is: 在模板中,我称之为:

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

As result it shows "None" . 结果显示为"None" I am trying to call provider in a different template. 我试图在其他模板中调用提供程序。 In it's own List/Detail generic views it works just fine. 在它自己的“列表/详细信息”通用视图中,它可以正常工作。 I am trying to call it in different app templates. 我试图在不同的应用程序模板中调用它。 Please advise. 请指教。

Update................ 更新...

My search.html for whoosh search engine includes 我的Whoosh搜索引擎的search.html包括

{% 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>

As I am not using any ModelManager or just using default Managers pre-defined for models. 因为我没有使用任何ModelManager或仅使用为模型预定义的默认Manager。 I've added a line of code under Product App model like this: 我在产品应用程序模型下添加了如下代码:

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

I case of calling provider you call related manager so it return None because manager have no method like this. 我在调用provider情况下调用了相关管理器,因此它返回None因为管理器没有这样的方法。
If you want to retrieve objects from managers, you should call self.providers.all() 如果要从管理器检索对象,则应调用self.providers.all()
In your case, template tags should looks like this: 在您的情况下,模板标记应如下所示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM