我尝试添加中间确认页面,同时根据要保存的对象的变量保存条件模型。例如,如果对象状态为draft
且更改将为live
,则触发确认。除了任何其他状态,只需保存而无需中间确认。
我将admin.ModelAdmin
添加到我的模型管理类:
class SurveyAdmin(SimpleHistoryAdmin, admin.ModelAdmin):
我试图覆盖save_model
来测试条件并在需要时添加确认:
@csrf_protect_m
@transaction.atomic
def save_model(self, request, object_id=None, form_url='', extra_context=None):
survey = Survey.objects.get(pk=object_id.id)
def response_add(self, request, obj, post_url_continue=None):
if request.method == 'POST' and 'confirm' in request.POST:
# do the thing
return HttpResponseRedirect(reverse('admin:survey_change', args=(survey.pk,)))
else:
context = {
'title': _('Make live'),
'is_popup': False,
'opts': self.model._meta,
'app_label': self.model._meta.app_label,
'object': survey,
}
return TemplateResponse(
request,
'admin/survey/make_live_confirmation.html',
context)
问题:
似乎save_model
忽略了我的HttpResponseRedirect
AND 我的TemplateResponse
返回。
我有这个确切的过程处理admin.py中的其他方法,但它们不是覆盖,它们是自定义定义。
为什么save_model
不能让我控制回报的任何想法?
答案 0 :(得分:2)
标准save_model
实施仅执行obj.save()
,使用它的方法(_changeform_view
和changelist_view
)不期望任何返回值。
如果您想更改请求/响应流,则必须使用changeform_view
changelist_view
单个记录更新和list_editable
更改列表