Django 视图只返回不完整的数据,只有一个字段到模板

Django view only returning incomplete data, only one field to template

我已经分叉了 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 %}

结果HTML是:

<li></li>

这表明它正在到达 for 循环,但由于某种原因没有返回数据。

至少有一个名为床的类别,它在 django-oscar 仪表板中显示良好。我错过了什么?

编辑:当我将 instance.name 更改为 instance 时,我在 HTML 中返回了以下内容:

(1,)

所以它有点工作,并且显示我假设返回的是主键,但为什么没有返回字段的名称?

Product.objects.values_list('categories') 生成一个 id 元组列表,表示与该查询集中的产品相关联的类别。这不是您想要发送到模板的内容,您想要发送实例,如果我没记错的话,更具体地说是产品实例。

改为Product.objects.all(),并根据奥斯卡模型的定义在模板中使用{{ instance.title }}https://github.com/django-oscar/django-oscar/blob/master/src/oscar/apps/catalogue/abstract_models.py以及您自定义的内容。