Django通用UpdateView: 获取要更新的对象
我其实在用 django.views.generic.edit.UpdateView
来更新某个模型的特定字段。因为我没有传递要更新的对象的主键或别名,所以我只是重写了 get_object
方法:
def get_object(self, queryset=None):
return Model.objects.get(user__id=self.request.user.id)
如果在 get_object
中找不到对象,我会收到一个 '查询不匹配[...]' 的错误,这没问题。但是如果出现异常,我希望能把用户重定向到其他地方,而不是显示异常信息。不幸的是,get_object
方法不允许重定向,因为 Django 期望它返回一个对象。
有没有什么优雅的方法可以检查请求的对象是否存在,如果不存在就重定向用户?我也想避免重写 dispatch
方法来在那儿检查对象是否存在。这样会导致多一次不必要的数据库查询。所以对于一个简单的更新视图,我会有三次查询。
任何建议都非常好 :)
1 个回答
1
你可以在你的 get_object
方法里执行 get
操作,让一个叫做 DoesNotExist 的错误继续传播(也就是说,不要去捕捉这个错误),然后重写 dispatch 方法,在那里捕捉这个 DoesNotExist 异常。然后从 dispatch 方法里,你可以返回一个重定向。
大概是这样的:
def dispatch(...):
try:
return super(...) # call superclass dispatch
except Model.DoesNotExist:
return ... your redirection ...