Django queryset命令过滤器

时间:2013-01-06 06:23:23

标签: django django-queryset

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

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)

我正在尝试根据未删除的Notes的数量来订购Tag对象。我可以使用Tag.objects.annotate(notes_count=Count('notes')).order_by('-notes_count')按笔记数排序,但此计数包括已将标记删除为真的注释。我的问题是,如何通过计算未删除的备注(即note.is_deleted = False)来运行此命令?

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

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

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

1 个答案:

答案 0 :(得分:1)

我不认为queryset api支持这一点,因此您可能需要诉诸.extra()