Python 在Django中,MyModel.objects.get(my_field=x)是否等于MyModel.objects.filter(my_field=x.get()?

Python 在Django中,MyModel.objects.get(my_field=x)是否等于MyModel.objects.filter(my_field=x.get()?,python,django,django-models,model,django-queryset,Python,Django,Django Models,Model,Django Queryset,我目前正在开发Django 1.4,我有一个简单的问题: 是: 完全相同(在结果、行为等方面): 最后一个版本在某些特定情况下会造成一些麻烦吗?两个版本的含义完全相同。让我们探索一下源代码 首先,模型管理器(“对象”部分)是一个使用的类。这意味着在这两种情况下都有相同的调用 另外,get()首先使用传入的所有参数进行filter()调用: def get(self, *args, **kwargs): clone = self.filter(*args, **kwargs) ..

我目前正在开发Django 1.4,我有一个简单的问题:

是:

完全相同(在结果、行为等方面):


最后一个版本在某些特定情况下会造成一些麻烦吗?

两个版本的含义完全相同。让我们探索一下源代码

首先,模型管理器(“对象”部分)是一个使用的类。这意味着在这两种情况下都有相同的调用

另外,
get()
首先使用传入的所有参数进行
filter()
调用:

def get(self, *args, **kwargs):
    clone = self.filter(*args, **kwargs)
    ...
然后,它检查返回的对象数量,并根据计数决定是抛出
DoesNotExist
还是抛出
MultipleObjectsReturned

这意味着:

MyModel.objects.get(my_field=x) 
正在转变为:

def get(self, *args, **kwargs):
    clone = self.filter(*args, **kwargs)
    ...
MyModel.objects.get(my_field=x) 
MyModel.objects.filter(my_field=x).get()