Исходя из вашего комментария выше, кажется, что пользователь может быть связан с событием, и его ассоциация является либо публичной c, либо частной (я понимаю, что здесь может означать want_private
). Если это так, то я предлагаю вам изменить структуру данных и сохранить эту информацию в виде через модель . Примерно так:
class Event(models.Model):
# Remove want_private from here.
class User(AbstractUser):
events = models.ManyToManyField(Event, related_name='users', through=UserEvent)
class UserEvent(models.Model):
""" Through model between event and user. Store want_private here."""
user = models.ForeignKey(User, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
want_private = models.BooleanField() # This is now a boolean field
Как это работает, объясняется в документации, на которую я ссылался выше.
Теперь ваш запрос на событие становится намного проще:
Event.objects.filter(users__username__startswith='a', userevent__wants_private=False)
Это даст вам все события, в которых хотя бы один пользователь связан с этим событием, и их связь не является личной . Если в событии есть пользователи, попадающие в обе категории, тогда этот запрос будет включать это событие.
Я сделал здесь некоторые предположения о значении want_private
. Если want_private
по сути является дополнительным флагом, который связан с ассоциацией пользователя с событием, то эта сквозная модель является правильной структурой данных.