python - Django 模型管理器根据查找值获取查询集

标签 python django

假设我有这样的模型和自定义管理器:

class FooManager(models.Manager):
    def get_query_set(self):
        super(FooManager, self).get_query_set()

class Foo(models.Model):
    name = models.CharField(max_length=10)
    status = models.BooleanField(default=False)
    objects = FooManager()

我觉得这应该很简单,但仔细阅读了文档和“ self ”,我可能错过了一些明显的东西。我的问题是如何根据实际查询期间传递的查找返回对象/查询集?

例如:

objs = Foo.objects.all()
print(objs, "Objects queryset only with status set to True")

objs = Foo.objects.filter(name__icontains='a')
print(objs, "Objects queryset with 'a' in name and status set to True")

objs = Foo.objects.filter(name__icontains='a', status=False)
print(objs, "Objects queryset with 'a' in name and status set to False")

我可以想象像这个示例:

class FooManager(models.Manager):
    def get_query_set(self):
        status = self.passed_lookups['status']
        queryset = super(FooManager, self).get_query_set()
        if status is None:
            queryset = queryset.filter(status=True)
        else:
            queryset = queryset.filter(status=status)
        return queryset

最佳答案

管理器类的查询集无权访问传递给它的查询。

您可以通过为您的模型创建两个查询管理器类来做到这一点。见下文

class FooManager(models.Manager):
    def get_query_set(self):
        super(FooManager, self).get_query_set().filter(status=True)

class Foo(models.Model):
    name = models.CharField(max_length=10)
    status = models.BooleanField(default=False)
    objects = FooManager()
    all_objects = models.Manager()

在你的代码中,当你想过滤状态时,你必须使用 Foo.objects.filter,当你不想过滤状态时,你必须使用 Foo.all_objects

关于python - Django 模型管理器根据查找值获取查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814066/

相关文章:

python - sympy 矩阵未对齐

javascript - 我如何根据用户提供的过滤值显示搜索结果?

python - python和R中卡方检验的不同p值

django - 覆盖 Django ModelForm 的 Clean_unique 方法

python - 为什么每个应用程序都有一个 model.py,而不是整个项目只有一个 model.py?

python - 使用 fixture 的 Pytest 参数化测试

python - 使用 Spark 的默认 log4j 配置文件 : org/apache/spark/log4j-defaults. 属性将默认日志级别设置为 "WARN"

python - 没有尾部斜杠的 Django i18n_patterns

django - 如何使用 CI/CD 和 Google CloudSQL 迁移 django 中的数据库?

Python无法从字典列表中创建字典