我想写一个过滤器,然后到处重复使用,我该怎么做?

例如:有一个带有标志 Student 的模型 field 。我想写一个过滤器来获取非研究生( flag=0 )。但是在很多 View 和函数中我们需要列出非研究生,我很懒,不想在这些 View 和函数中一遍又一遍地编写过滤器,因为这样会很难维护源代码。

我可以在模型学生中使用元吗?我没有找到任何与过滤器相关的元选项。或者我可以编写一个函数来过滤模型学生吗?在我看来,模型中的函数只适用于一个 Student 对象而不是列表。

最佳答案

您可以使用自定义管理器来保持干燥并增强可读性(明确命名的过滤器总是比拖动复杂的过滤器更好)

class GraduateManager(models.Manager):
    def get_queryset(self):
        return super(GraduateManager, self).get_queryset().filter(graduated=True)

class UndergraduateManager(models.Manager):
    def get_queryset(self):
        return super(Undergraduate, self).get_queryset().filter(graduated=False)

class Student(models.Model):
    graduated = BooleanField()

    graduates = GraduateManager()
    undergraduates = UndergraduateManager()

要使用它,您将获得一个可以根据需要进行操作的普通查询集
Student.graduates.all(), or .filter(), or .count() etc

引用 https://docs.djangoproject.com/en/1.8/topics/db/managers/#modifying-initial-manager-querysets

10-06 15:22