#django #django-forms
#django #django-forms
Вопрос:
Форма всегда отправляет запрос Get вместо Post, который был явно добавлен с помощью method = «POST». Таким образом, невозможно сохранить данные в БД. Я только начал с Django, поэтому любая помощь будет оценена. Ниже приведены фрагменты кода:
create_order.html
<form method="POST" action="{% url 'home' %}">
{% csrf_token %}
{{form}}
<input class="btn btn-primary btn-sm" type="submit" name="Submit">
</form>
urls.py
urlpatterns = [
path('', views.dashboard, name='home'),
path('products/', views.product, name='products'),
path('customer/<str:cust_id>/', views.customer, name='customer'),
path('create_order/', views.create_order, name='create_order'),
]
views.py
def create_order(request):
form = OrderForm()
if request.method == 'POST':
print("In Post", request.method)
form = OrderForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
print("In else", request.method)
print(form.is_valid())
if form.is_valid():
form.save()
return redirect('/')
context = {'form' : form}
return render(request, 'accounts/create_order.html', context)
вывод терминала
In else GET False
Ответ №1:
Вы отправляете запрос POST в неправильный вид. Это должно быть create_order
представление, поэтому:
<form method="POST" action="{% url 'create_order' %}">
{% csrf_token %}
{{ form }}
<input class="btn btn-primary btn-sm" type="submit" name="Submit">
</form>
Обратите внимание, что вы не должны проверять форму в случае запроса GET, поскольку тогда вы только отображаете форму. Таким образом, логика представления должна быть:
def create_order(request):
if request.method == 'POST':
print("In Post", request.method)
form = OrderForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = OrderForm()
context = {'form' : form}
return render(request, 'accounts/create_order.html', context)
Комментарии:
1. Спасибо @Willem, это сработало. Кроме того, я мог бы сделать это, даже не добавляя действие.
<form method="POST" action=""> {% csrf_token %} {{form}} <input class="btn btn-primary btn-sm" type="submit" name="Submit"> </form>
Ответ №2:
Попробуйте добавить метод действия формы в свой HTML-файл
<form action="" method="post">{% csrf_token %}
{{ form}}
<input type="submit" value="Submit Feedback" />
</form>
</div>