エラーをレンダリング中:キャッチDatabaseError
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
の最初の行に表示されるのはなぜ?
EDIT:amateur
のコメントに続いて、この行をビューに追加しました(上記のスニペットのどれも)。
supermarkets = [supermarket.id for supermarket in supermarkets]
そして、私はcosts_of_product()
と呼ばれ、それは働いた!非常に不思議なのは、私がこの行を関数costs_of_product()
の本体で動かすと動作しないということです!
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
あなたがリストにフィルタを使用するので、これはpossiiblyエラーが発生する可能性があります
.filterステートメントのスーパーマーケットとは何ですか?スーパーマーケットがオブジェクトのリストではなくIDのリストである場合は、supermarket__id__inを使用する必要があります。 – goh
実際には、オブジェクトではありません。それにもかかわらず、 'supermarket__id__in'を使用しても、観測された振る舞いは何も変化しません。 –
.values_list()を使用してIDを取得する – goh