Мастер добавления новых элементов (в 2 этапа) - PullRequest
1 голос
/ 26 марта 2012

Я хотел бы сделать кнопку 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 }}" />), которое было отправлено пользователем?

...