足够简单的例子 - 我有一些以查询集开头的 Django 代码......
queryset = MyModel.objects.all()
稍后它会执行各种过滤,具体取决于一些可配置的选项......
if something:
queryset = self.queryset.filter(foo=some_foo)
if another_thing:
queryset = self.queryset.filter(bar=some_bar)
最后它执行查找...
try:
obj = queryset.get()
except ObjectDoesNotExist:
raise ValidationError('Does not exist')
现在,由于过滤需要以灵活的方式进行,因此some_foo
orsome_bar
变量可能不是正确的类型(例如,我们最终可能会得到一个空字符串来尝试过滤整数字段。)所以这是可能的此代码最终会引发 aTypeError
或 a ValueError
。
没关系,我可以适当地处理此案,但是从 ORM 合同中我不清楚的是,我应该在什么时候提出这些例外。
- 它会出现在
.filter()
声明中吗?... - ...或在
.get()
声明中?... - ...或未指定,我将其处理为能够发生在任何一个上?(例如,可能取决于数据库后端的实现?)