Django模型层中GET和FILTER的区别

时间:2009-10-09 00:21:12

标签: python django

有什么区别,请以外行的方式用例子来解释。谢谢!

1 个答案:

答案 0 :(得分:40)

我不知道你是否真的需要一个例子,这很容易:

  • 如果您知道它是与您的查询匹配的一个对象,请使用get。如果它不止一个,它将会失败。
  • 否则使用过滤器,它会为您提供一个对象列表。

更确切地说:

  • MyTable.objects.get(id=x).whatever为您提供对象的whatever属性。
如果找到多个对象,

get()会引发MultipleObjectsReturned。 MultipleObjectsReturned异常是模型的属性 类。

如果找不到对象,

get()会引发一个DoesNotExist异常 给定参数。此异常也是模型类的属性。

  • MyTable.objects.filter(somecolumn=x)不仅可用作列表,还可以再次查询,例如MyTable.objects.filter(somecolumn=x).order_by('date')
  • 原因是它实际上不是一个列表,而是一个查询对象。您可以通过列表迭代它:for obj in MyTable.objects.filter(somecolumn=x)