使用 field_set 的 Django 模型过滤器,保留为查询集

Django model filter with field_set, keep as queryset

我有一个过滤器来列出有效的方法,并且可以使用,但是当我尝试在列表中创建 order_by 时,无法完成。

我怎样才能做到这一点并在应用过滤器后保持查询集生成 order_by,

我不知道有更好的方法来使用 field_set 吗?

型号:

class Case(models.Model):
    user = models.ForeignKey(User)
    ....

class Share(models.Model):
    case = models.ForeignKey(Case)
    ....

class Field(models.Model):
    case = models.ForeignKey(Case)
    field = models.ForeignKey(DefaultField)
    ....

-

object_list = Field.objects.all()

l = [f for f in object_list if f.case.share_set.filter(user=request.user).count()]

无论如何,这是一件非常低效的事情。您应该始终尝试尽可能多地在数据库中进行过滤。您的查询意味着数据库必须将所有 Field 行发送到 Django,实例化它们,然后丢弃不匹配的那些。相反,你应该只查询你想要的:

object_list = Field.objects.filter(case__share__user=request.user)

现在,除了效率更高之外,您还有一个查询集,您可以在其上调用 order_by