Просмотр не заберет сообщение - PullRequest
0 голосов
/ 09 марта 2011

Может кто-нибудь сказать мне, почему следующее представление не получит запрос POST:

# Loads all the latest phone numbers for the models.py file
def client_phones_form_view(request, clientKEY):
    try:
        i_clientKEY = int(clientKEY)
    except ValueError:
        raise Http404()
    phones = []
    # Populates a list with the latest phone numbers for ALL types of phone
    for k, v in PHONE_CHOICES:
        try:
            phones.append(ClientPhone.objects.filter(client=i_clientKEY, phone_type=k).latest('id'))
        except ClientPhone.DoesNotExist:
            pass
    if request.method == 'POST':
        formPhone = ClientPhoneForm(request.POST)
        if formPhone.is_valid() and formPhone.number.clean(formPhone.number):
            c = Client.objects.get(id=i_clientKEY)
            formPhone.CustomSave(c, request.user)
            return render_to_response(...)
        else:
            return render_to_response(...)
    else:
        formPhone = ClientPhoneForm()
        return render_to_response(...)

Я знаю, когда я отправляю форму, она перезагружается, но она всегда перезагружает нижнюю render_to_response

РЕДАКТИРОВАТЬ:

JavaScript выглядит примерно так:

$( "#newPhoneDialog" ).dialog({
    autoOpen: false,
    height: 200,
    width: 350,
    modal: true,
    buttons: {
        "Add New Phone Number": function() {
            var bValid = true;
            //alert($('#id_number').val()+" - "+$('#id_phone_type').val());

            bValid = bValid && checkNumberLength( phoneNumber, "the phone number", 11, 15 );

            bValid = bValid && checkNumberRegexp( phoneNumber, /^([0-9])|( \t)+$/, "The phone number may only consist of numbers and spaces");

            if ( bValid ) {
                $('.error').hide(); // hide the error div
                $('.success').hide(); // hide the success div
                $('.info').hide(); // hide the information div
                $.ajax({ // create an AJAX call...
                    data: $('#newPhoneForm').serialize(), // get the form data
                    type: 'POST', // GET or POST
                    url: 'client/form/phones/1/', // the file to call
                    success: function(response) { // on success..
                        $('#clientPhonesForm').html(response); // update the main phones DIV
                    }
                });
                $( this ).dialog( "close" );
                //return false; // cancel original event to prevent form submitting
            }
        },
        Cancel: function() {
            // reloads the phone div because re-selecting the first item in the options doesn't work
            $('#clientPhonesForm').load('{% url client.views.client_phones_form_view clientKEY %}');
            $( this ).dialog( "close" );
        }
    },
    close: function() {
        // reloads the phone div because re-selecting the first item in the options doesn't work
        //$('#clientPhonesForm').load('{% url client.views.client_phones_form_view clientKEY %}');
    }
});

И HTML примерно так:

<div id="newPhoneDialog" title="Create New Phone Number">
        Please enter a valid phone number:
    <div id="container">
        <form action="{% url client.views.client_phones_form_view clientKEY %}" method="POST" id="newPhoneForm">
            <table>
            {% for field in formPhone %}
            <tr><td>{{ field.label_tag }}</td><td>{{ field }}</td></tr>
            {% endfor %}
            </table>
        </form>
    </div>
</div>

РЕДАКТИРОВАТЬ

Возможно, этот вопрос был бы лучше, если бы он сказал 'Как я (jquery ajax) отправляю форму при нажатии кнопки'

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Это пуленепробиваемое условие прямо здесь: if request.method == 'POST', поэтому я бы начал смотреть, почему вы не генерируете POST запрос, а не представление.

Можете ли вы убедиться, что вы публикуетеиз вашей формы?

<form method="post">

Сервер dev регистрирует запрос POST?Должен сказать "GET /..." или "POST /..."


Обновление: ОК, так что это форма запроса ajax.Недавно в SO был еще один человек, у которого была похожая проблема, потому что запрос AJAX вызывал исходную форму как запрос GET.

Я вижу, вы прокомментировали return false - может ли это быть проблемой?На самом деле, не берите в голову, я не думаю, что диалоговые кнопки будут мешать.

Что еще более важно: что делает запись сервера разработки?ПОЧТА тогда ПОЛУЧИТЬ?Один получить?

0 голосов
/ 09 марта 2011

Следующее, казалось, было ответом. Правильно это или нет, я не знаю:

# Loads all the latest phone numbers for the models.py file
def client_phones_form_view(request, clientKEY):
    try:
        i_clientKEY = int(clientKEY)
    except ValueError:
        raise Http404()
    phones = []
    # Populates a list with the latest phone numbers for ALL types of phone
    for k, v in PHONE_CHOICES:
        try:
            phones.append(ClientPhone.objects.filter(...).latest('id'))
        except ClientPhone.DoesNotExist:
            pass
    if request.method == 'POST':
        formPhone = ClientPhoneForm(request.POST)
        if formPhone.is_valid():
            try:
                n = formPhone.cleaned_data['number']
            except ValidationError:
                return render_to_response(...)
            c = Client.objects.get(id=i_clientKEY)
            formPhone.CustomNumberSave(c, n, request.user)
            return render_to_response(...)
        else:
            return render_to_response(...)

    else:
        formPhone = ClientPhoneForm()
        return render_to_response(...)
...