2011-08-10 5 views
0

エラーをレンダリング中:キャッチ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エラーが発生する可能性があります

+0

.filterステートメントのスーパーマーケットとは何ですか?スーパーマーケットがオブジェクトのリストではなくIDのリストである場合は、supermarket__id__inを使用する必要があります。 – goh

+0

実際には、オブジェクトではありません。それにもかかわらず、 'supermarket__id__in'を使用しても、観測された振る舞いは何も変化しません。 –

+0

.values_list()を使用してIDを取得する – goh

答えて

0

はQ.このような何かを使用してみてください。

Djangoはあなたが持っているオブジェクトをレンダリングしようとしています(そして、はい、Djangoはあなたの関数から何かを得ました)が、できません。

+0

同じエラーです。 '/usr/lib/pymodules/python2.6/django/db/backends/postgresql_psycopg2/base.py in execute、44行目' –

関連する問題