繁体   English   中英

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元组列表,这些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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM