Как иметь одно представление для нескольких HTML форм - Django - PullRequest
2 голосов
/ 15 февраля 2020

Это мое мнение. Так что я хочу сохранить 2 разные формы HTML в одном и том же виде, но я не могу сделать это, потому что, когда я добавляю 1 форму, я получаю сообщение об ошибке «другие», если их нет.

def home(request):
    name = None
    if request.method == 'POST':
        name = request.POST.get('name')
        choices = request.POST.get('choices')
        subtest = request.POST.get('subtest')
        reference = request.POST.get('reference')
        unit = request.POST.get('unit')
        test = Test()
        test.name = name
        test.save()
        subtest = Subtest()
        subtest.test = Test.objects.get(name=choices)
        subtest.name = subtest
        subtest.unit = unit
        subtest.reference_value = reference
        subtest.save()
        # print(name)
        return redirect('home')
    return render(request,'main.html',{}) 

У меня есть 2 разные формы. Я не использовал django формы, потому что хотел попробовать что-то новое.

МОЯ ПЕРВАЯ ФОРМА

<form method="POST">
        {% csrf_token %}
        <div class="icon-holder">
          <i data-modal-target="test-popup" class="icon-cross"></i>
        </div>
        <div class="input-group">
          <input type="text" name="name" placeholder="Test name" />
        </div>
        <div class="button-group">
          <button type="submit">Submit</button>
        </div>
      </form>

МОЯ ВТОРАЯ ФОРМА

<form method="POST">
        {% csrf_token %}
        <div class="icon-holder">
          <i data-modal-target="menu-test-popup" class="icon-cross"></i>
        </div>
        <div class="input-group">
          <label for="test-select">Test Name:</label>
          <select name="choices" id="test-select">
            {% for test in test %}
            <option value="{{test.name}}" name='choices'>{{test.name|title}}</option>
            {% endfor %}
          </select>
        </div>
        <div class="input-group">
          <input type="text" name="subtest" placeholder="SubTest name" />
        </div>
        <div class="input-group">
          <input type="text" name="reference" placeholder="Reference rate" />
        </div>
        <div class="input-group">
          <input type="text" name="unit" placeholder="Unit" />
        </div>
        <div class="button-group">
          <button type="submit">Submit</button>
        </div>
      </form>

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

первая форма

<form method="POST">
...
<input name="form_type" value="first-form" type="hidden">
</form>

вторая форма

<form method="POST">
...
<input name="form_type" value="second-form" type="hidden">
</form>

функция просмотра

def view(request):
  if method == "POST":

    form_type = request.POST.get('form_type')

    if form_type == "first-form":
      # first form's process
    elif form_type == "second-form":  
      #second form's process
0 голосов
/ 15 февраля 2020

У вас есть две формы здесь, когда вы отправляете вторую форму, отправляются только поля из второй формы.

, поэтому из этой строки

name = request.POST.get('name')

имя станет None. Но я считаю, что ваша тестовая модель не принимает никакого значения None для поля имени (причина, по которой вы "IntegrityError at / NOT NULL ограничение не удалось: lab_test.name").

Чтобы преодолеть это, сначала проверьте, если есть любое значение для «name», затем приступите к созданию тестового экземпляра

if name:
    test = Test()
    test.name = name
    test.save()

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

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