[英]Django pre_save signal and ModelAdmin custom error message
我有一個模型,其 pre_save() 信號通過以下方式連接到刪除服務(json、REST 等):
錯誤響應格式如下:
{'local_model_field': [u'This element already exists']}
本地模型 pre_save 信號然后引發ValidationError
:
raise ValidationError(json_response['local_model_field'][0])
這很好用。
現在,在 django 管理員上,當我嘗試模擬遠程插入一個已經存在的對象時,我得到一個 500 頁,這很好但並不理想。
有沒有辦法讓 pre_save() 錯誤氣泡一直到ModelAdmin
並顯示為標准錯誤消息,並填充相關內容?
我嘗試了以下但無濟於事:
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
"""
trying to display the right message when pre_save() fails on model save() method (after asking CC)
"""
try:
return super(ObjectAdmin, self).changeform_view(request, object_id, form_url, extra_context)
except IntegrityError as e:
self.message_user(request, e, level=messages.ERROR)
return HttpResponseRedirect(form_url)
ValidationError
是正確的做法嗎? 知道pre_save()
必須鎖定任何以本地和遠程重復結尾的機會。 主要原因是本地/遠程對象創建可以由管理員進行,也可以從其他網站實例/類型(例如,前端、面向最終用戶)進行。
謝謝
不確定這是否仍然相關。 但我解決這個問題的方法是創建一個 ModelForm:
class AuthorAdminForm(forms.ModelForm):
def clean(self):
# or some api calls here
if self.instance.id > 4:
self.instance.name = "4+"
else:
ValidationError("Id is bigger that 4")
return super().clean()
然后通過將表單添加到管理模型:
class AuthorAdmin(admin.ModelAdmin):
form = AuthorAdminForm
這個clean()
方法將確保您可以在點擊模型save()
方法之前添加/修改字段,並且如果在點擊 url 時出現404
錯誤等問題,仍然會拋出ValidationError
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.