给学生上一节课:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=20)

有没有可能,如果可能,如何让QuerySet基于动态参数进行过滤?例如:

 # Instead of:
 Person.objects.filter(name__startswith='B')
 # ... and:
 Person.objects.filter(name__endswith='B')

 # ... is there some way, given:
 filter_by = '{0}__{1}'.format('name', 'startswith')
 filter_value = 'B'

 # ... that you can run the equivalent of this?
 Person.objects.filter(filter_by=filter_value)
 # ... which will throw an exception, since `filter_by` is not
 # an attribute of `Person`.

推荐答案

Python的参数扩展可以用来解决这个问题:

kwargs = {
    '{0}__{1}'.format('name', 'startswith'): 'A',
    '{0}__{1}'.format('name', 'endswith'): 'Z'
}

Person.objects.filter(**kwargs)

这是一个非常常见且有用的Python习语.

Django相关问答推荐

在Django中提交表单后更改模型数据

注册新用户时,对象没有属性';is_active';错误:';NoneType';对象没有属性

基于Django类的视图:除非登录,否则拒绝访问future 日期

无法迁移,模型中的外键导致了问题

我如何获得已循环的每个项目的名称?

来自日历的 Django 动态 url

Django ORM:子查询上的文本聚合器

在 django 中使用自定义 url 转换器传递 url 参数

Django获取具有值的相关对象的计数并将其添加到注释中

Django celery 页面给出 404

使用 south 重构具有继承的 Django 模型

验证 Django 模型对象的正确方法?

如何测试某个日志(log)消息是否记录在 Django 测试用例中?

OrderingFilter 没有属性filter_queryset

从 virtualenv 中,pip freeze > requirements.txt 给出了一堆垃圾!如何修剪它?

Django - 来自 QuerySet 的唯一列表

在 django admin 中链接到外键对象

django-getlist()

使用 .order_by() 和 .latest() 的 Django 查询

我将如何package打包和销售 Django 应用程序?