Python 在Django中,MyModel.objects.get(my_field=x)是否等于MyModel.objects.filter(my_field=x.get()?
我目前正在开发Django 1.4,我有一个简单的问题: 是: 完全相同(在结果、行为等方面):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) ..
最后一个版本在某些特定情况下会造成一些麻烦吗?两个版本的含义完全相同。让我们探索一下源代码 首先,模型管理器(“对象”部分)是一个使用的类。这意味着在这两种情况下都有相同的调用 另外,
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()