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以及您自定义的内容。
我已经分叉了 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以及您自定义的内容。