[英]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元组列表,这些ID元组表示与该查询集中的产品相关的类别。 那不是您想要发送到模板的东西,不是您想要发送实例的东西,如果我没有记错的话,您想发送的是产品实例。
改为使用Product.objects.all()
,然后根据oscar模型的定义在模板中使用{{ instance.title }}
: https : //github.com/django-oscar/django-oscar/blob/ master / src / oscar / apps / catalogue / abstract_models.py以及您对其进行自定义的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.