Django QuerySet в шаблоне для реляционных моделей

Я пытаюсь установить связь с другой моделью, используя FK в django, но я не могу вызывать поля модели, связанные с FK, в шаблонах django. В шаблоне, когда я вызываю «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". Я пытаюсь вызвать провайдера в другом шаблоне. В своих собственных общих представлениях List/Detail он работает просто отлично. Я пытаюсь вызвать его в разных шаблонах приложений. Пожалуйста, порекомендуйте.

Обновлять................

Мой search.html для поисковой системы 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 или просто использую менеджеры по умолчанию, предварительно определенные для моделей. Я добавил строку кода в модель приложения продукта следующим образом:

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

person Shazia Nusrat    schedule 16.07.2016    source источник


Ответы (1)


В случае вызова provider вы вызываете связанный менеджер, поэтому он возвращает None, потому что у менеджера нет такого метода.
Если вы хотите получить объекты от менеджеров, вы должны вызвать self.providers.all()
В вашем случае теги шаблона должны выглядеть так :

{% for item in object.providers.all %}
    {{ provider.name }}
{% endfor %}
person Ivan Semochkin    schedule 16.07.2016
comment
Я попробовал это, но поскольку я пока не использую никаких менеджеров, поэтому в приложении «Продукт» я добавил функцию для get_provider, где я просто возвращал self.providers.all(). Я также обновляю вопрос с помощью своего шаблона. Я реализую код поисковой системы whoosh, поэтому в его search.html вы можете увидеть, как я перечислил код. - person Shazia Nusrat; 16.07.2016