Django通用UpdateView:获取要更新的对象

时间:2014-03-19 15:43:48

标签: python django django-views

我实际上正在使用django.views.generic.edit.UpdateView更新模型特定字段。由于我没有传递要更新的对象的主键或slug,我只是简单地覆盖了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 个答案:

答案 0 :(得分:1)

您可以在get方法中执行get_object,允许传播DoNotExist错误(不要捕获它),并覆盖调度方法并在那里捕获DoesNotExist异常。从发送中,您可以返回重定向。

类似的东西:

def dispatch(...):
    try:
         return super(...)  # call superclass dispatch
    except Model.DoesNotExist:
         return ... your redirection ...