我分叉了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,)
所以它有点奏效,并显示出我所假定的是返回主键,但是为什么不返回字段名呢?
答案 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 }}
。