错误:
TemplateSyntaxError at /some/location
Caught DatabaseError while rendering: more than one row returned by a subquery used as an expression
模特:
class Price(models.Model):
supermarket = models.ForeignKey(SuperMarket)
product = models.ForeignKey(Product)
price = models.DecimalField(max_digits=6, decimal_places=2)
查询:
def costs_of_product(product, supermarkets):
filter1 = Price.objects.filter(product=product)
return filter1.filter(supermarket__in=supermarkets)
虽然productList
的结果是costs_of_product
的调用结果。
模板:
<ul>
{% for pr in productList %}
<li>{{ pr.supermarket }}: {{ pr.price }} € </li>
{% empty %}
<li>No products are available.</li>
{% endfor %}
</ul>
问题:
为什么上述错误显示在模板中for
的第一行?
编辑:在amateur
的评论之后,我在视图中添加了这一行(没有上述代码段)。
supermarkets = [supermarket.id for supermarket in supermarkets]
然后我打电话给costs_of_product()
它就有效了!非常奇怪的是,当我在函数costs_of_product()
的主体中移动这一行时,它不起作用!
答案 0 :(得分:0)
尝试使用Q.像这样:
from django.db.models import Q
def costs_of_product(product, supermarkets):
filter1 = Price.objects.filter(Q(product=product) & Q(supermarket__in=supermarkets))
return filter1
您在列表中使用过滤器,因此可能会导致错误。
至于地方 - 这是因为Django尝试渲染你得到的对象(是的,Django从你的函数中得到了一些东西),但不能这样做。