如何在满足条件时强制save_model失败(Django)

时间:2016-05-06 23:57:34

标签: python django django-admin

即使显示错误消息且未保存对象,save_model方法也会说:

  

"真实状态" RealState对象"已成功添加。"。

admin.py

class RealStateAdmin(admin.ModelAdmin):
    model = RealState
    can_delete = False
    list_display = ['name', 'country', 'state', 'city', 'acquisition_date', 'acquisition_value']
    inlines         = [Inlines.CurrentValueRealStateAdminInline]

    def save_model(self, request, model, form, change):
        model.owner = Owner.objects.get(user_id=request.user.id)
        ca = CheckingAccount.objects.get(owner_id=model.owner_id)
        if(model.acquisition_value <= ca.balance):
            if(model.rental_value ==""):
                model.rental_value = None
            super(RealStateAdmin, self).save_model(request, model, form, change)
        else:
            messages.error(request, "Insufficient funds in your checking account to make this transaction.");

在验证CheckingAccount没有足够的资金购买东西后,我提出错误(它运作正常)。 如果条件失败=&gt;我的超级没有保存(预期的行为)。 但是save_model的绿色信息仍然出现。 任何想法?

1 个答案:

答案 0 :(得分:0)

它在ModelAdmin的response_add中添加了这些消息。如果您不想要消息,最简单的方法是按照消息documentation中的描述关闭消息。

  

你可以从你的INSTALLED_APPS删除'django.contrib.messages',   来自MIDDLEWARE_CLASSES的MessageMiddleware行和消息   来自TEMPLATES的上下文处理器。

如果您希望在save_model方法中清除消息的其他位置显示消息。

  

当存储实例为时,消息被标记为清除   迭代(并在处理响应时清除)。

storage = messages.get_messages(request)
for message in storage:
    do_something_with(message)

与以前相同的参考。显示错误消息的正确方法是

self.message_user(request, 
  "Insufficient funds in your checking account to make this transaction.",
  messages.SUCCESS)