所以在django我们写
Entry.objects.filter(blog__id=3)
Run Code Online (Sandbox Code Playgroud)
这看起来很难看,因为有时会有太多的下划线
Entry.objects.filter(blog_something_ underscore _too_ many _id = 3)
为什么django不能使用像
[entry.objects if blog.id=3 ]
Run Code Online (Sandbox Code Playgroud)
?
我不是这方面的专家,但为什么必须双重下划线?写这篇文章时,python的语法会有更优雅的风格吗?
Django运行在Python上,它在语法方面设置了一些基本约束,使得以下建议语法不可能(Python不允许对基本语法进行太多的重新定义):
[entry.objects if blog.id=3 ]
Run Code Online (Sandbox Code Playgroud)
此外,"blog"和"id"不是对象,它们是指数据库中的名称,因此解决这些blog.id
问题也是有问题的.除非它当然是作为字符串输入的,这实际上是正在做的事情,因为关键字参数作为Python中的字典对象传递.它当然可以通过其他方式完成,这里是一个如何使用点作为分隔符的示例:
def dotstyle(dict):
retdict = {}
for key, value in dict.items():
retdict[key.replace(".", "__")] = value
return retdict
Entry.objects.filter(**dotstyle({"blog.id": 3})
Run Code Online (Sandbox Code Playgroud)
通过将它结合到Django中的过滤器函数中,我们可以省去dotstyle函数和笨拙的**,但我们仍然留下字典括号,这可能是他们使用双下划线的原因.
归档时间: |
|
查看次数: |
2937 次 |
最近记录: |