Ссылка на идентификатор переменной формы в django - PullRequest
0 голосов
/ 04 мая 2011

Мне трудно понять, как ссылаться на (переменное) имя формы в django.Это код, который у меня есть:

в email_edit.html:

{% for email in email_list %}
<table>
<tr>
    <td><form action="/emails/edit/" method="post">
    {% csrf_token %}

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit" name="action"></td>
    <td><input type="submit" value="Delete" name="action"></td>
</tr>
</form>
</table>
{% endfor %}

<p>Add new</p>
    <form action="/emails/edit/" method="post">
    {% csrf_token %}
    <input type="text"  value="" name="add_email">
    <input type="submit" value="Add" name="action">

def email_edit(request):
    email_list = Email.objects.order_by('email')
    if request.POST:
        action = request.POST.get('action')
        if action == "Add":
            Email.objects.create(email=request.POST['add_email'])
            return HttpResponseRedirect('/emails/edit/')
        if action == 'Delete':
            Email.objects.filter(id={{ emails.id }}).delete()
            return HttpResponseRedirect('/emails/edit/')
        if action == "Update":
            Email.objects.filter(id= {{ emails.id }}).update(name=request.POST[{{ emails.id }}])
            return HttpResponseRedirect('/emails/edit/'))

Что входит в {{ email.id }} в файле views.py дляправильно ссылаться на форму?

1 Ответ

3 голосов
/ 04 мая 2011

Не будь грубым, я думаю, ты захочешь сделать шаг назад к тому, чего ты пытаешься достичь. У вас есть список писем, которые вы хотите затем отредактировать или удалить. Вам не нужно отправлять форму, чтобы перейти к другому представлению, в котором вы собираетесь редактировать или удалить одну из этих записей.

Вам, безусловно, понадобится форма в представлении редактирования или удаления, чтобы опубликовать ваши значения, но в случае этого списка я на 99,9% уверен, что вам просто нужен тег привязки для редактирования или удаления:

{% for email in email_list %}
<table>
    <tr>
        <td>{{email}}></td>
        <td><a href="{% url edit_email email.id %}">Edit</a></td>
        <td><a href="{% url delete_email email.id %}">Delete</a></td>
    </tr>
</table>
{% endfor %}

Надеюсь, что это имеет смысл.

[Последующий ответ] Учитывая код, который вы настроили, я бы сделал так, чтобы каждая строка представляла собой собственную форму, а поле электронной почты должно было бы иметь нединамическое имя. В противном случае будет сложнее получить доступ к этому значению в коллекции request.POST. Вот как я бы это настроил:

#views.py
from django.shortcuts import render

def my_view(request):
    email_list = MyModel.objects.all()
    if request.method == 'POST':
        email = request.POST.get('email')
        action = request.POST.get('action')
        if action == 'Edit':
            #do edit
        else:
            #do delete
    return render(request, 'template.html', {'email_list' : email_list})

#template.html
{% for email in email_list %}
<table>
    <tr>
        <form action="." method="post">
        <td>{{ email }}<input type="hidden" name="email" value="{{ email }}" /></td>
        <td><input type="submit" name="action" value="Edit" /></td>
        <td><input type="submit" name="action" value="Delete" /></td>
        </form>
    </tr>
</table>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...