Атрибуты запроса - PullRequest
       16

Атрибуты запроса

0 голосов
/ 07 июля 2019

У меня есть страница, и есть 3 типа кнопок (яблоко, банан, апельсин), при нажатии на первую кнопку появляется форма для получения информации.Первая кнопка должна отправлять информацию на модель яблока, банановая кнопка должна отправлять информацию на модель банана и так оранжевого цвета!

вот мои модели.py:

from django.db import models

class Apple(models.Model):
    first_name = models.CharField(max_length=100)

class Banana(models.Model):
    first_name = models.CharField(max_length=100)

class Orange(models.Model):
    first_name = models.CharField(max_length=100)

мои формы.py:

from django import forms

class Fruit(forms.Form):
   first_name = forms.CharField(max_length=100)

my views.py:

def fruitForm(request):
    form = Fruit()
    if request.method == 'POST' & request.id == 'apple':
          form = Fruit(request.POST)
          if form.is_valid():
                  Apple.objects.create(**form.cleaned_data)
     elif request.method =='POST' & request.id =='orange':
          form = Fruit(request.POST)
          if form.is_valid():
                  Orange.objects.create(**form.cleaned_data)
     elif request.method =='POST' & request.id =='banana':
          form = Fruit(request.POST)
          if form.is_valid():
                  Banana.objects.create(**form.cleaned_data)
     return render(request, 'main/home.html', {'form':form})

my home.html:

<button class='btn btn-primary' data-target='#orange'> Add </button>
<form action=# method="POST" id = "orange">
 {% csrf_token %}
 {{ form.as_p }}
</form>

хорошо, когда я пытаюсь перейти на главную страницу (гдекнопки), я получил эту ошибку: объект 'WSGIRequest' не имеет атрибута 'id'.запрос не имеет атрибута id, верно?Итак, как я могу получить конкретные данные для сохранения в относительной модели?

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Атрибуты тела запроса POST поступают из атрибутов name входных данных формы. Таким образом, один из способов справиться с этим, если вы хотите сохранить свою функцию представления одинаковой, - это добавить скрытое поле к каждой форме, которое определяет, какую модель следует обновить:

<form action=# method="POST" id = "orange">
 {% csrf_token %}
 <input type="hidden" name="id" value="orange" />
 {{ form.as_p }}
</form>

И аналогично для других 2 форм.

(Это не единственный способ решить эту проблему. Например, в вашем URL может быть переменная, указывающая, какую модель использовать. Затем вы можете проверить ее значение в функции просмотра. Для этого нужно немного Впрочем, больше работы, включая изменение вашего urls.py.)

0 голосов
/ 07 июля 2019

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

<form>
<input type="submit" class="btn btn-primary" name="orange" value="Add">
<input type="submit" class="btn btn-primary" name="apple" value="Add">
</form>

Это значение будет одним из ключей в данных поста

if 'orange' in request.POST:
    pass
elif 'apple' in request.POST:
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...