我通常把這種檢查的原子塊,然後拋出異常,看看你是否可以從它那裏得到任何東西 -
在模型 -
def save(self, *args, **kwargs):
if self.pk is None:
....
if self.date_created is None:
.....
with transaction.atomic():
self.clean() # my personal clean method
raise Exception("This is a dummy exception") #this will automatically roll back all the save methods call hierarchy if they are also following this process, to nothing is saved
super().save()
在視圖類(基礎類視圖),以向用戶顯示錯誤消息 -
def post(self, request, *args, **kwargs):
if form.is_valid():
....... # create the model
try:
model.save()
return self.form_valid(form)
except Exception as err:
messages.error(request, str(err))
return self.form_invalid(form)
然後在模板它們顯示爲 -
<div class="flash_message hide">
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>
{{ message|safe }}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
注意:我使用Django Message Framework將消息從視圖傳遞到模板。我也使用twitter bootstrap 3,所以我的模板格式如此。
您還可以繼承Exception
以添加自定義錯誤。
你不需要引發任何異常,你只需確保一切順利,如果不是,返回True或False,那麼在視圖中你可以檢查'form.save()'是如何去顯示一條消息給用戶告訴他表格是有效的,但保存出錯了...... – 2014-10-29 10:00:00