Отключите звук с микрофона и подключите устройство к внешнему источнику звука (например, к наушникам).
filter
метод для фильтрации, какие объекты возвращаются на основе указанных критериев, таким образом, это не то, что Вы хотите здесь. Одна опция состоит в том, чтобы сделать второй запрос для получения всех оценок для, учитывая Event
объекты для тока User
.
Модели:
import collections
from django.db import models
class RatingManager(models.Manager):
def get_for_user(self, events, user):
ratings = self.filter(event__in=[event.id for event in events],
user=user)
rating_dict = collections.defaultdict(lambda: None)
for rating in ratings:
rating_dict[rating.event_id] = rating
return rating_dict
class Rating(models.Model):
# ...
objects = RatingManager()
Представление:
events = Event.objects.all()
user_ratings = Rating.objects.get_for_user(events, request.user)
context = {
'events': [(event, user_ratings[event.id]) for event in events],
}
Шаблон:
{% for event, user_rating in events %}
{% if user_rating %} ... {% endif %}
{% endfor %}
В дополнение к предложению S.Lott можно рассмотреть использование select_related () для ограничения количества запросов базы данных; иначе Ваш шаблон сделает, запрос на каждом событии проходит через цикл.
Event.objects.all().select_related(depth=1)
параметр глубины не требуется, но если Ваши другие модели будут иметь дополнительные внешние ключи, то он ограничит количество соединений.
Для лучшего использования Django необходимо постараться не пытаться сделать соединения.
А "уехал, внешнее объединение" является на самом деле списком объектов с дополнительными отношениями.
Это - просто список Событий, Event.objects.all()
. Некоторые Объекты-события имеют оценку, некоторые не делают.
Вы получаете список Событий в Вашем представлении. Вы обрабатываете дополнительные отношения в своем шаблоне.
{% for e in event_list %}
{{ e }}
{% if e.rating_set.all %}{{ e.rating_set }}{% endif %}
{% endfor %}
точка атаки.
Думаю, тебе нужно сделать что-то вроде этого.
events=Event.objects.filter(rating__user=request.user.id)
ratings='(select rating from ratings where user_id=%d and event_id=event_events.id '%request.user.id
events=events.extra(select={'rating':ratings})