Django: пользовательский конструктор для класса формы, проблемы с доступом к данным из запроса. - PullRequest
0 голосов
/ 06 мая 2009

Я написал собственный конструктор для формы, весь класс формы выглядит так:

class UploadForm(forms.Form):
    file = forms.FileField(label = "Plik")

    def __init__(self, coto, naglowek, *args, **kwargs):
        super(UploadForm, self).__init__(*args, **kwargs)
        self.coto = coto
        self.naglowek = naglowek

При отправке формы, на мой взгляд, у меня есть что-то вроде

if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if form.is_valid():
        add_form(request.FILES['file'])
        return HttpResponseRedirect('uploaded/')

Проблема в том, что когда я создаю форму таким образом, на мой взгляд, я не передаю coto и naglowek , поэтому когда я вызываю форму is_valid () -> возвращает false.

Шаблон, который прошёл, выглядит так:

<table class="uploadform">
<form action="." method="POST" enctype="multipart/form-data">
{% for form in forms %} 
<tr>
    <td>{{ form.naglowek }}</td>
    <td>{{ form.file }}</td>
    <td><input type="submit" name="{{ form.coto }}" id="{{ form.coto }}" value="Wyślij"></td>
</tr>
{% endfor %}
</form>
</table>

Буду благодарен за любые предложения.

[EDIT] Я не могу сказать это достаточно ясно, но я буду стараться изо всех сил:

Когда я отправляю эту форму, мне нужно знать, какая кнопка отправки была нажата - многие из них назначены для одной формы. Из того, что я знаю, когда я назначаю идентификатор кнопке отправки, это должно быть доступно в посте, верно? Хитрость в том, что это не доступно.

У меня есть два вопроса: * Что нужно сделать, если я хочу знать, какая кнопка отправки была нажата? Является ли присвоение имени единственным способом? * Есть ли ошибка в моей логике?

Ответы [ 3 ]

2 голосов
/ 06 мая 2009

Ваш вопрос беспорядок. Там есть код и есть правка с другим вопросом. Вопрос редактирования не имеет ничего общего с заголовком.

Пожалуйста, обновите этот вопрос, чтобы он стал реальным вопросом.

Если у вас есть несколько кнопок отправки, вы должны дать им разные имена или значения (или обе). Вот наш код, который использует различные значения, чтобы определить, какая кнопка была нажата.

        <form method="post" action="." enctype="multipart/form-data">
            <input type="hidden" name="object_id" value="{{e.id}}"/>
            {% ifequal object.workflow "uploaded" %}
            <input type="submit" name="action" value="Validate"/>
            <br/>
            <input type="submit" name="action" value="Delete"/>
            {% endifequal %}
            {% ifequal object.workflow "validated" %}
            <input type="submit" name="action" value="Load"/>
            {% endifequal %}
            {% ifequal object.workflow "processed" %}
            <input type="submit" name="action" value="Undo"/>
            {% endifequal %}
            {% ifequal object.workflow "failed" %}
            <input type="submit" name="action" value="Validate"/>
            {% endifequal %}
        </form>

Функция просмотра имеет такие вещи:

            if request.POST['action'] == "Delete":

для изменения действия в зависимости от кнопки.

0 голосов
/ 06 мая 2009

Вы переопределили конструктор формы по умолчанию и изменили порядок его параметров. Таким образом, вы должны создать свою собственную форму с явным именованием аргументов:

form = UploadForm(data=request.POST, files=request.FILES, coto=..., naglowek=...)
0 голосов
/ 06 мая 2009
request.POST['coto']
request.POST['naglowek']

Я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...