如何检查是否保存了Django表单以显示适当的反馈?

时间:2015-08-31 19:31:29

标签: django django-models django-forms save message

我正在使用Django 1.8。我想在视图中执行以下操作:

if request.method == 'POST' and form.is_valid():
    form.save()
    messages.success(request, 'Changes saved!')

但如果save()失败,它仍会显示成功消息。如何确认保存实际上是否成功?

我想我可以将邮件放在post_save中,但邮件本身的内容取决于ModelForm使用的视图,而不是Model本身。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果.save()方法失败,Django应该引发异常。你不应该担心它。但是,如果您仍然想确定,可以尝试执行过滤器并查看对象是否已创建。

if request.method == 'POST' and form.is_valid():
    form.save()
    try:
        my_object = MyModel.objects.get(**form.cleaned_data) # retrieve the created object
        messages.success(request, 'Changes saved!')
    except MyModel.DoesNotExist:
        # Create error message for object not created
    except:
        # Create message for other exceptions

(不建议进行此检查,因为这会导致额外的数据库命中。)

答案 1 :(得分:1)

这可能是一种更简洁的方式,但您可以将其包裹在Try/Except块中:

if request.method == 'POST' and form.is_valid():
    try:
       form.save()
    except:
       # raise exception or error message

    messages.success(request, 'Changes saved!')

这也不优雅,但您可以添加post_save()挂钩。如果created=True则必须保存。

但是,如果您的表单有效,则不太可能不保存(除非您的数据库中存在事务错误)