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

时间:2018-12-15 15:08:32

标签: python django django-oscar

我分叉了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,)

所以它有点奏效,并显示出我所假定的是返回主键,但是为什么不返回字段名呢?

1 个答案:

答案 0 :(得分:1)

Product.objects.values_list('categories')产生一个ID元组列表,这些ID元组表示与该查询集中的产品相关的类别。那不是您想要发送到模板的东西,不是您想要发送实例的东西,更确切地说,是我没有记错的产品实例。

取而代之的是Product.objects.all(),并根据oscar模型https://github.com/django-oscar/django-oscar/blob/master/src/oscar/apps/catalogue/abstract_models.py的定义以及您对其进行的任何定制,在模板中使用{{ instance.title }}