Отношения многие-ко-многим в Django - ISNULL () эквивалент mysql - PullRequest
1 голос
/ 02 ноября 2009

У меня есть две модели, которые в основном это:

Book(Model):
    title = models.CharField(max_length = 250)
    read_by = ManyToManyField(User)
    ...  

User(Model):
    firstName = models.CharField(max_length = 250)
    lastName = models.CharField(max_length = 250)
    ...

Теперь, как мне создать список всех книг с логическим «прочитанным» для каждой книги? В MySQL я могу использовать ISNULL () с OUTER JOIN. Как я могу сделать это в Джанго? Должен ли я использовать сырой MySQL?

Уточнение. Я хочу создать список для каждого пользователя, чтобы каждый пользователь мог отмечать галочкой каждую прочитанную книгу.

1 Ответ

1 голос
/ 02 ноября 2009
books = Book.objects.annotate(read=models.Count('read_by'))

Тогда, если вам нужен только список прочитанных книг ::

read_books = books.exclude(read=0)

Или вы можете просто использовать аннотированное свойство read каждого экземпляра, которое, будучи целым числом, очевидно, будет принимать правильное логическое значение для непрочитанных книг.

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