У меня есть модель Event
с именами пользователей ManyToManyField
.Я хочу получить все события с дополнительным атрибутом, который указывает, принадлежит ли конкретный пользователь этому событию или нет.
class Event(models.Model):
users = models.ManyToManyField(User)
# Expected code format
user = User.objects.get(id=1)
events = // Event query
print events[0].your_event // It should be True if above user is part of this event else False
Вот код, который я пробовал
from django.db.models import Case, When, BooleanField
user = User.objects.get(id=1)
Event.objects.annotate(your_event=Case(when(users=user, then=True), default=False, output_field=BooleanField()))
Проблема с кодом выше : если у объекта Event
есть несколько пользователей (пусть 4), то он возвращает 4 объекта, у которых your_event
как False
в трех объектах и True
в одном объекте.Но мне нужен только объект для каждого события.
Я считаю, что для этой цели может существовать лучшее решение.