Django Queryset和filter()vs get()

时间:2017-03-20 09:28:42

标签: python django django-models

filter和get

之间有什么区别?
    >>> Question.objects.filter(id=1)
    <QuerySet [<Question: What's new?>]>
    >>> Question.objects.get(pk=1)
    <Question: What's new?>

2 个答案:

答案 0 :(得分:19)

不同之处在于过滤器返回一个查询集对象,并且返回所需的对象。

如果您使用filter(),那么只要您期望的对象不仅仅符合一个符合条件的对象,通常就会执行此操作。如果找不到符合条件的项,则filter()返回空查询集而不会抛出错误。

如果您使用get(),则您希望一个(且仅一个)项符合您的条件。如果项目不存在或存在符合条件的多个项目,则会抛出错误。因此,您应该始终在try ..除了..块或使用快捷函数(如get_object_or_404)时使用,以便正确处理异常。

答案 1 :(得分:-3)

在“过滤器”中,您可以添加更多属性进行搜索,或者您可以获得满足您对DB的查询的对象列表。