您可以覆盖myapp.article 的ModelAdmin (Source) 上的add_view 方法。它负责渲染模型表单并将对象添加到数据库中。
在添加功能时,您可能希望保持原始代码不变,而不是复制/修改它。
草稿
def add_view(self, request, **kwargs):
if Stage1:
do_my_stuff()
return response
else:
return super(ModelAdmin, self).add_view(self, request, **kwargs)
现在您需要区分这两个阶段。 GET 查询字符串中的参数可以做到这一点。要将初始数据传递给管理员中的表单,您只需在查询字符串中包含字段名称值对作为参数。
草案 2
def add_view(self, request, **kwargs):
if 'stage2' not in request.GET:
if request.method == 'POST':
# calculate values
parameters = 'field1=foo&field2=bar'
return redirect('myapp_article_add' + '?stage2=1&' + parameters)
else:
# prepare form for selections
return response
else:
return super(ModelAdmin, self).add_view(self, request, **kwargs)
您可能需要查看代码以在第一阶段返回正确的响应。有几个模板变量 add_view 集,但希望这是进一步研究的良好开端。