Фильтр порядка набора запросов 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()

Другие вопросы по тегам