Фильтр порядка набора запросов Django
У меня есть два модельных объекта, и они имеют отношение многие ко многим -
class Note(models.Model):
title = models.CharField(max_length=127)
body = models.TextField()
is_deleted = models.BooleanField()
def __unicode__(self):
return "{} - {}".format(self.title, self.body)
class Tag(models.Model):
tag_name = models.CharField(max_length = 100)
notes = models.ManyToManyField(Note)
Я пытаюсь заказать объект Tag на основе количества не удаленных заметок. я могу использовать Tag.objects.annotate(notes_count=Count('notes')).order_by('-notes_count')
упорядочить по количеству заметок, но в это число входят заметки, которые удалили флаг как истинный. У меня вопрос, как я могу запустить это, чтобы упорядочить теги по количеству не удаленных заметок (т.е. note.is_deleted=False)?
Я попытался определить метод в теге, который возвращает только не удаленные заметки, т.е.
def non_deleted_notes(self):
return self.notes.filter(is_deleted=False)
А потом замена Count('notes')
с Count('non_deleted_notes')
, но это приводит к ошибке.
1 ответ
Я не думаю, что это поддерживается API-интерфейсом queryset, поэтому, возможно, вам придется прибегнуть к .extra()