所以在django我们写
Entry.objects.filter(blog__id=3)
这看起来很难看,因为有时会有太多的下划线
Entry.objects.filter(blog_something_ 下划线 _too_ 许多 _id = 3)
为什么django不能使用像
这样的语法[entry.objects if blog.id=3 ]
我不是这方面的专家,但为什么必须双重下划线?写这篇文章时,python的语法会有更优雅的风格吗?
答案 0 :(得分:9)
Django在Python上运行,它在语法方面设置了一些基本约束,使得以下建议的语法不可能(Python不允许对基本语法进行太多的重新定义):
[entry.objects if blog.id=3 ]
此外,“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})
通过将这个结合到Django中的过滤器函数中,我们可以省去dotstyle函数和笨拙的**,但我们仍然留下字典括号,这可能就是为什么它们用双下划线代替。 / p>