filter和get
之间有什么区别? >>> Question.objects.filter(id=1)
<QuerySet [<Question: What's new?>]>
>>> Question.objects.get(pk=1)
<Question: What's new?>
答案 0 :(得分:19)
不同之处在于过滤器返回一个查询集对象,并且返回所需的对象。
如果您使用filter(),那么只要您期望的对象不仅仅符合一个符合条件的对象,通常就会执行此操作。如果找不到符合条件的项,则filter()返回空查询集而不会抛出错误。
如果您使用get(),则您希望一个(且仅一个)项符合您的条件。如果项目不存在或存在符合条件的多个项目,则会抛出错误。因此,您应该始终在try ..除了..块或使用快捷函数(如get_object_or_404)时使用,以便正确处理异常。
答案 1 :(得分:-3)
在“过滤器”中,您可以添加更多属性进行搜索,或者您可以获得满足您对DB的查询的对象列表。