我正在开发一个Django应用程序,它需要对指定的模型字段执行操作。在
Django已经有了一种用于引用带有查询约束的模型字段的调用样式——多个术语被组合成带有双下划线的谓词,并作为关键字arg传递。查询集过滤,使用QuerySet.filter()
和Q()
,使用以下语法,例如:
stuff = MyStuff.objects.filter(name__isnull=False)
thing = MyStuff.objects.filter(Q(name__icontains="yo") & Q(ptype__iendswith="dogg")).get()
F()
表达式也使用相同的语法,这些表达式用于在查询语句中构建动态谓词。大多数Django用户已经以某种形式看到(如果没有使用)这种语法。在
我想创建一个类似的动态计算的、可组合的Python习惯用法——为了这个问题的缘故,我将它称为G()
——它使用相同的语法,为一个延迟计算的字段查找实例提供一个类似的句柄,该实例可以与其他类似实例进行逻辑重组。在
一个人应该如何处理这项任务?Q()
和{django.utils.tree.Node
的子类——至少它们在django1.4中(它们并不是总是像现在这样实现的,它们的接口可能是私有的,也可能不是私有的)。kwarg过滤器表达式的大部分动作发生在django.db.models.sql.Query
中,我相信。。。这是一个庞大而令人望而生畏的类,与ORM的无数部分有着难以辨认的耦合。在
我确信查询过滤器语法可以比我想象的简单得多。我应该从哪里开始?在
提前谢谢。在
我不太清楚你想用双下划线的关键字做什么,但最简单的起点可能是这里:
从那以后,我想这取决于你将如何处理这些信息。希望这有帮助!在
相关问题 更多 >
编程相关推荐