2

我有两个模型对象,它们具有多对多关系-

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')按笔记计数排序,但此计数包括已删除标记为 true 的笔记。我的问题是,我如何运行它以按未删除笔记的数量对标签进行排序(即 note.is_deleted=False)?

我尝试在 Tag 中定义一个仅返回未删除笔记的方法,即 -

def non_deleted_notes(self):
    return self.notes.filter(is_deleted=False)

然后用 替换Count('notes')Count('non_deleted_notes')但这会导致错误。

4

1 回答 1

1

我认为queryset api不支持这一点,所以你可能需要求助于.extra()

于 2013-01-06T11:56:26.810 回答