[英]Django objects.filter vs objects.all
我对 django 对象的 filter() 和 all() 方法有疑问。 这不是两个更喜欢哪一个的问题,我只是注意到一个奇怪的(对我来说)行为。 因为,正如它在
Django ORM - objects.filter() 与 objects.all().filter() - 哪个更受欢迎?
在 Django src 中,两种方式都应该返回相同的(它们都引用了 chain() 方法):
看:
和:
所以 filter() 和 all() 方法应该返回相同的对象。 但我最近发现了以下行为:
MyModel.objects.all()[0].update(name="Test")
# --> $: AttributeError: type object 'MyModel' has no attribute 'update'
# And to check if it indeed has no update method:
MyModel.objects.all[0].__dir__() # --> no update() method in returned dictionary but a save method
因此,虽然上面的代码引发了错误,但下面的行会起作用:
MyModel.objects.all()[0].name = "Test"
MyModel.objects.all()[0].save()
但是,如果通过 filter() 方法检索到相同的 object,则它具有 update() 方法。
为什么我两次都得到相同的 object 但添加了看似不同的方法?
update()
function 仅在管理器 object 上。 查看您的评论,您实际上被称为MyModel.objects.filter(name="Test").update(name="test2")
这是一个有效的查询集 function。 如果您使用MyModel.objects.get(name="Test")
这将与all()
版本相同。
在您的all()
示例中,您正在处理 model,它缺少update()
function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.