【发布时间】:2018-12-15 15:08:31
【问题描述】:
我已经分叉了 django-oscar 目录应用程序来更改正在使用的模型。据我所知,不是主要方式,也不会影响从数据库中提取数据。这似乎得到了 django-oscar 仪表板仍然可以正常工作并让我添加和查看产品的事实的支持。我的模型.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')将返回一个只有categories的元组。将其更改为Product.objects.all()。即便如此,这个模型是否有name字段? -
@Borut,元组是否应该至少不返回类别名称?不,模型没有 name 字段,这是我的错误,但我认为 remove.name 会返回所有字段
-
它将只返回 id。如果你想要名字,那么你必须使用 categories__name。
标签: python django django-oscar