我正在使用Django 1.8
。我想在视图中执行以下操作:
if request.method == 'POST' and form.is_valid():
form.save()
messages.success(request, 'Changes saved!')
但如果save()
失败,它仍会显示成功消息。如何确认保存实际上是否成功?
我想我可以将邮件放在post_save
中,但邮件本身的内容取决于ModelForm
使用的视图,而不是Model
本身。
谢谢!
答案 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
则必须保存。
但是,如果您的表单有效,则不太可能不保存(除非您的数据库中存在事务错误)