【问题标题】:Django view only returning incomplete data, only one field to templateDjango视图只返回不完整的数据,模板只有一个字段
【发布时间】: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


【解决方案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 以及您对其进行自定义的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多