gpt4 book ai didi

python - 如何实现 Django 查询过滤器表达式 API 的 kwarg 语法(例如 `related_model__fieldname__condition` )?

转载 作者:行者123 更新时间:2023-11-28 17:49:50 25 4
gpt4 key购买 nike

我正在开发一个需要对指定模型字段执行操作的 Django 应用。

Django 已经有一个调用样式来引用带有查询约束的模型字段——多个术语被组合成带有双下划线的谓词并作为关键字参数传递。查询集过滤,使用 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()F() 都是 django.utils.tree.Node 的子类——至少它们在 Django 1.4 中(它们并不总是像现在这样实现,它们的接口(interface)可能是也可能不是私有(private)的)。大部分 kwarg-filter-expression 操作发生在 django.db.models.sql.Query 中,我相信......这是一个庞大而令人生畏的类,与ORM 的胆量。

我有理由相信查询过滤器语法可以比我想象的更简单地完成。我应该从哪里开始?

提前致谢。

最佳答案

我不太确定你想用双下划线关键字做什么,但最简单的起点可能是这里:

>>> def G(**kwargs):
... for key, value in kwargs.items():
... print "{} = {}".format(key.split("__"), value)
...
...
...
>>> G(some__key__here="val1", another__one__again="val2")
['some', 'key', 'here'] = val1
['another', 'one', 'again'] = val2

由此看来,我想这取决于您打算如何处理这些信息。希望这对您有所帮助!

关于python - 如何实现 Django 查询过滤器表达式 API 的 kwarg 语法(例如 `related_model__fieldname__condition` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com