Я хотел бы сделать кнопку Save
на странице администратора Django, чтобы не перенаправлять обратно на страницу, где я нажал кнопку Add
, а чтобы перейти к моему шаблону. В моем шаблоне есть несколько полей, которые необходимо заполнить, и результат необходимо отправить обратно на сервер.
В моем admin.py
я переопределил response_add
, который вызывается при создании новой записи в БД.
admin.py
:
def response_add(self, request, obj, post_url_continue='../%s/'):
#save the entry in DB
super(MyModelAdmin, self).response_add(request, obj, post_url_continue)
#To second step -- template
return self.second_step(request, obj)
views.second_step
:
def second_step(self, request, obj):
#make something with obj
#get some obj fields as params (list)
#When cancel button clicked in template's form
if 'cancel' in request.POST:
self.message_user(request, _(u'Canceled'))
return
#When saveparams button clicked in template's form
elif 'saveparams' in request.POST:
for p in params:
#p.value is models.CharField
#request.POST['p.name'] -- inputted by user in template's form
p.value = request.POST[p.name]
p.save()
msg = "%s. Success;" % (obj)
self.message_user(request, "%s" % msg)
return HttpResponseRedirect(request.get_full_path())
return render_to_response('template.html', {'obj': obj, 'params': params, \
'path': request.get_full_path()})
template.html
{% extends "admin/base_site.html" %}
{% block content %}
<form method="post" action="{{ path }}">
<p>
{% for p in params %}
<input type="text" name="{{ p.name }}" />
{% endfor %}
<input type="hidden" name="action" value="second_step" />
<input type="submit" name="cancel" value="Cancel" />
<input type="submit" name="saveparams" value="Save" />
</p>
</form>
{% endblock %}
Проблема :
Я не могу "поймать" отправку формы POST.
Как я могу получить на стороне сервера значение (<input type="text" name="{{ p.name }}" />
), которое было отправлено пользователем?