Django view возвращает только неполные данные, только одно поле в шаблон - PullRequest
0 голосов
/ 15 декабря 2018

Я изменил приложение каталога django-oscar, чтобы изменить используемые модели.Насколько я понимаю, не главным образом и не таким образом, чтобы это могло повлиять на извлечение данных из базы данных.Кажется, это подтверждается тем фактом, что панель инструментов django-oscar по-прежнему работает нормально и позволяет мне добавлять и просматривать продукты.Мой models.py из моего разветвленного приложения:

from django.db import models

class Collection(models.Model):
    name = models.CharField(max_length=50)
    prod_category = models.CharField(max_length=50)
    description = models.TextField()
    manufacturer = models.TextField()
    num_products = models.PositiveIntegerField()
    image_url = models.URLField()

from oscar.apps.catalogue.abstract_models import AbstractProduct

class Product(AbstractProduct):
    collection = models.ForeignKey(Collection, on_delete=models.CASCADE, null=True)
    multiplier = models.DecimalField(max_digits=2, decimal_places=1, default='2.2')

from oscar.apps.catalogue.models import *

Вот мой соответствующий вид из моего views.py

def product(request):
    template = loader.get_template('/home/my_app/my_site/main_page/templates/main_page/product.html')
    prods = Product.objects.values_list('categories')
    context={'prods': prods}
    return HttpResponse(template.render(context))

Я попытался загрузить из встроенной модели и моей разветвленной модели (комментирование и раскомментирование одного или обоих), ни одно из них не имеет значения:

#from forkedoscarapps.catalogue.models import Product
from oscar.core.loading import get_class, get_model

Product = get_model('catalogue', 'product')

И код, который я использую в шаблоне для отображения данных из представления:

{% for instance in prods %}
    <li><{{ instance.name }}</li>
{% endfor %}

Полученный HTMLis:

<li></li>

Что показывает, что он достигает цикла for, но по какой-то причине данные не возвращаются.

Существует по крайней мере одна категория с именем bed, которая хорошо отображается в django.-оскар приборной панели.Что я пропустил в своем представлении?

edit: Когда я изменяю instance.name на instance, я получаю следующее возвращаемое в HTML:

(1,)

Так что это несколько работаети показывает, что я предполагаю, что возвращается первичный ключ, но почему имя поля не возвращается?

1 Ответ

0 голосов
/ 16 декабря 2018

Product.objects.values_list('categories') возвращает список кортежей идентификаторов, которые представляют категории, связанные с продуктами в этом наборе запросов.Это не то, что вы хотите отправить в шаблон, вы хотите отправлять экземпляры, точнее, экземпляры продукта, если я не ошибаюсь.

Делайте Product.objects.all() вместо этого, и просто используйте {{ instance.title }} в шаблоне согласнок определению модели оскара: https://github.com/django-oscar/django-oscar/blob/master/src/oscar/apps/catalogue/abstract_models.py и к тому, что вы настроили поверх него.

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