Показать форму, если ее значение существует в дБ - PullRequest
0 голосов
/ 25 февраля 2020

views.py

@login_required()
def Info_anlegen(request, id=None):
    item = get_object_or_404(Kunden, id=id)
    kontaktform_form = InfoForm(request.POST or None, instance=item)
    if WindowsHome.objects.filter(KN=item.KN).exists():
        item1 = WindowsHome.objects.get(KN=item.KN)
        winform_form = InfoWinForm(request.POST or None, instance=item1)
    if kontaktform_form.is_valid():
        return redirect('/Verwaltung/KontaktAnlegen')
    else:
        form = acroniform(instance=item)
        return render(request, 'blog/infokontakt.html',
                      {'kontaktform_form': kontaktform_form, 'winform_form': winform_form})

инфоконтакт. html

{% extends 'blog/base.html' %}
{% load bootstrap4 %}
{% block supertitle %} InfoPage {% endblock %}
{% block Content %}
{% load static %}
<html>
<div class="p-2 mb-1 bg-white text-black">
    <head>
        <div class="d-flex justify-content-center align-items-center container ">
            <img src="{% static 'blog/Gubler.jpeg' %}" alt="Gubler" height="300" width="700">
        </div>
    </head>
    <br>
    <body>
        <form class="form-row" action="" method="post">
            <div style="margin-left: 2.5em;">
                <font color="black">
                    <div class="col-sm-10 col-form-label">
                        {% csrf_token %}
                        {% bootstrap_form kontaktform_form %}
                    </div>
                </font>
            </div>
        </form>
        <form class="form-row" action="" method="post">
            <div style="margin-left: 2.5em;">
                <font color="black">
                    <div class="col-sm-10 col-form-label">
                        {% csrf_token %}
                        {% bootstrap_form winform_form %}
                    </div>
                </font>
            </div>
        </form>

Моя проблема:

, если WindowsHome.KN существует, он отображается

но если он не существует, я получаю ошибку

UnboundLocalError at /Verwaltung/InfoKontakt/6
local variable 'winform_form' referenced before assignment
Request Method: GET
Request URL:    http://127.0.0.1:8000/Verwaltung/InfoKontakt/6
Django Version: 3.0.1
Exception Type: UnboundLocalError
Exception Value:    
local variable 'winform_form' referenced before assignment

Как мне сказать, что если запись в БД не существует, она не должна отображать форму? ИЛИ, если запись в БД не существует, просто отобразите интервал ""

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы можете инициализировать winform_form как None в начале вашего метода, чтобы он не выдавал эту ошибку. (т.е.)

def Info_anlegen(request, id=None):
    winform_form = None  # Do like this
    item = get_object_or_404(Kunden, id=id)

, а также в своем шаблоне вы можете использовать django теги шаблона {% if%} ... {% endif%}

т.е.

{% if winform_form %}
      <form class="form-row" action="" method="post">
            <div style="margin-left: 2.5em;">
                <font color="black">
                    <div class="col-sm-10 col-form-label">
                        {% csrf_token %}
                        {% bootstrap_form winform_form %}
                    </div>
                </font>
            </div>
        </form>
{% endif %}
1 голос
/ 25 февраля 2020

Вы пытаетесь отправить winform_form в шаблон, но он не установлен, когда WindowsHome.objects.filter(KN=item.KN).exists() ложно.

Возможно, вам следует сделать что-то вроде этого:

@login_required()
def Info_anlegen(request, id=None):
    context = {}
    item = get_object_or_404(Kunden, id=id)
    kontaktform_form = InfoForm(request.POST or None, instance=item)
    if WindowsHome.objects.filter(KN=item.KN).exists():
        item1 = WindowsHome.objects.get(KN=item.KN)
        winform_form = InfoWinForm(request.POST or None, instance=item1)
        context['winform_form'] = winform_form
    if kontaktform_form.is_valid():
        return redirect('/Verwaltung/KontaktAnlegen')
    else:
        form = acroniform(instance=item)
        context['kontaktform_form'] = kontaktform_form
        return render(request, 'blog/infokontakt.html', context)
...