Непоследовательное перенаправление - PullRequest
0 голосов
/ 12 мая 2019

Я хочу получать сообщение в зависимости от типа кнопки, которую я нажимаю.Вместо этого django реагирует странно, когда я нажимаю кнопку и отправляю мне другую страницу, которая не должна отображаться.Urls.py

re_path(r'^liste-ue/$', views.liste_ue, name="liste_ue"),
re_path(r'^ajouter-ue/$', views.ajouter_ue, name="ajouter_ue"),
re_path(r'^modifier-ue/(?P<code>[a-zA-Z0-9 .-]{4,10})/$', views.modifier_ue, name="modifier_ue"),

Views.py

# La view pour qui permet de lister et de créer des UEs. Seul les administrateurs y ont accèes.
def liste_ue(request):
    ues = UE.objects.all();
    return render(request, 'felyn/admin/liste_ue.html', {'ues': ues});


# La view qui permet d'ajouter les UEs. seul les administrateurs y ont accès.
def ajouter_ue(request):

    if request.method == 'POST':

        ue_form     = UEForms(request.POST);
        if ue_form.is_valid():          
            code_ue     = ue_form.clean_code_ue();
            intitule_ue = ue_form.clean_intitule_ue();
            semestre    = ue_form.cleaned_data['semestre'];

            if 'continuer' in request.POST:
                ue_form.save();
                ue_form = UEForms();    
                return render(request, 'felyn/admin/ajouter_ue.html', {'ue_form':ue_form});     
            elif 'quitter' in request.POST:
                ue = ue_form.save();
                ues = UE.objects.all();
                return render(request, 'felyn/admin/liste_ue.html', {'ues': ues});
        else:
            return render(request, 'felyn/admin/ajouter_ue.html', {'ue_form': ue_form});

    else:
        ue_form = UEForms();
        return render(request, 'felyn/admin/ajouter_ue.html', {'ue_form': ue_form});


# La view qui permet de supprimer une UE
def modifier_ue(request, code):

    if request.method == 'POST':

        ue_form = UEForms(request.POST);
        if ue_form.is_valid() and 'supprimer' in request.POST:
            return HttpResponse('supprimer');

        elif ue_form.is_valid() and 'continuer' in request.POST:
            return HttpResponse('continuer');

        elif ue_form.is_valid() and 'quitter' in request.POST:
            return HttpResponse('quitter');

        else:   
            return render(request, 'felyn/admin/ajouter_ue.html', {'ue_form': ue_form});

    else:
        ue  = UE.objects.get(code_ue=code);
        ue_form = UEForms(instance=ue);
        return render(request, 'felyn/admin/modifier_ue.html', {'ue_form': ue_form, 'ue': ue, 'code': code});

ajouter_ue.html

    <form action="{% url 'ajouter_ue' %}" method="post"> 
        {% csrf_token %}
        {{ ue_form.non_field_errors }}
        <div class="form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Code</label>

            <div class="col-sm-5"> {{ ue_form.code_ue.errors }}{{ ue_form.code_ue }}</div>
        </div>
        <div class="form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Intitulé</label>
            <div class="col-sm-5">{{ ue_form.intitule_ue.errors }}{{ ue_form.intitule_ue }}</div>
        </div>

        <div class=" form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Semestre</label>
            <div class="col-sm-5">{{ ue_form.semestre.errors }}{{ ue_form.semestre }}</div>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-primary" name="continuer">Enregistrer et ajouter à nouveau</button>
            <button type="submit" class="btn btn-primary" name="quitter">Enregistrer</button>
        </div>
    </form>

modifier_ue.html


<form action="{% url 'modifier_ue' code=code %}" method="post"> 
        {% csrf_token %}
        {{ ue_form.non_field_errors }}
        <div class="form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Code</label>

            <div class="col-sm-5"> {{ ue_form.code_ue.errors }}{{ ue_form.code_ue }}</div>
        </div>
        <div class="form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Intitulé</label>
            <div class="col-sm-5">{{ ue_form.intitule_ue.errors }}{{ ue_form.intitule_ue }}</div>
        </div>

        <div class=" form-group row">
            <label for="{{ ue_form.id_for_label }}" class="col-sm-2 col-form-label">Semestre</label>
            <div class="col-sm-5">{{ ue_form.semestre.errors }}{{ ue_form.semestre }}</div>
        </div>
        <div class="form-group">
                <button type="submit" class="btn btn-danger" name="supprimer">Supprimer</button>
            <button type="submit" class="btn btn-primary" name="continuer">Enregistrer et ajouter à nouveau</button>
            <button type="submit" class="btn btn-primary" name="quitter">Enregistrer</button>
        </div>
    </form>

Когда яЯ нахожусь в шаблоне "modifier_ue.html", и я нажимаю на кнопку, URL говорит мне, что я нахожусь в шаблоне "modifer_ue.html", но рендеринг страницы - это "ajouter_ue.html".Таким образом, URL-адрес правильный, но не рендеринг.как это решить?

после того, как avair сделал несколько тестов, я понял, что ue_form ().is_valid всегда будет неправильным.ПРИЧИНА эту часть кода

>>>ue   = UE.objects.get(code_ue='INF401')
>>>ue_form = UEForms(instance=ue)
>>>ue_form.is_valid()
False

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

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