Ошибка базы данных при рендеринге - PullRequest
0 голосов
/ 11 августа 2011

Ошибка:

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, я добавил эту строку в представление (ни один из приведенных выше фрагментов).это сработало!Что очень любопытно, так это то, что когда я перемещаю эту строку в теле функции costs_of_product(), она не работает!

1 Ответ

0 голосов
/ 11 августа 2011

Попробуйте использовать 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 получил что-то из вашей функции), но не может этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...