Параметры запроса Django POST не возвращаются в views.py
Я хочу получать значения из POST-запроса. Я хочу взять значение "taken_name" из html-формы в представления.
Я попробовал несколько ответов на вопросы, но мне кажется, что я упускаю очень простую вещь. Я не могу разобраться с этим почти 2 часа.
Имя параметра в html - 'taken_name'.
Также параметры urls и views верны и соответствуют методам, которые упоминаются на stackoverflow.
Я получаю эту ошибку :
'null значение в столбце "имя_посетителя" отношения "посетитель" нарушает not-null ограничение DETAIL: Неудачная строка содержит (15, null, null, null).'
Это означает, что я не могу получить значение из html.
Пробовал: получить значение из POST-запроса в Django
res.html
{% for i in allList %}
<div id="createRecordModal-{{forloop.counter}}" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST" action="/session/{{visitor_id}}">
{% csrf_token %}
<div class="modal-header">
<h4 class="modal-title" name="taken_table">Masa {{i.table_number}}</h4>
<button
type="button"
class="btn-close btn-close-white"
data-bs-dismiss="modal"
aria-hidden="Close"
></button>
</div>
<div class="modal-body">
<div class="form-group">
<label>İsim</label>
<input
name="taken_name"
type="text"
class="form-control"
required
/>
</div>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-bs-dismiss="modal"
aria-label="Close"
>
İptal
</button>
<a href="/session/{{visitor_no}}" type="submit" class="btn btn-danger">Kaydet</a>
</div>
</form>
</div>
</div>
</div>
{% endfor %}
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.loginUser, name="login"),
path('reservation', views.reservation, name="reservation"),
path('delete/<str:table_number>', views.delete, name='delete'),
path('create/<str:table_number>', views.create, name='create'),
path('session/<str:visitor_id>', views.createSession, name='create2')
]
views.py
def createSession(request, visitor_id):
addSession = visitor.objects.filter(visitor_id = visitor_id)
if request.method == "POST":
taken_name = request.POST.get('taken_name')
taken_surname = request.POST.get('taken_surname')
taken_time = request.POST.get('taken_time')
print(taken_name)
print(taken_surname)
print(taken_time)
else:
print('method is not POST')
addSession.create(
visitor_name = taken_name,
visitor_surname = taken_surname,
res_time = taken_time
)
context = {
'addSession': addSession
}
return redirect('reservation')
def reservation(request):
allList = table_inventory.objects.all()
max_rating = table_inventory.objects.aggregate(Max('table_number')).get('table_number__max')
visitor_no = visitor.objects.aggregate(Max('visitor_id')).get('visitor_id__max')
visitor_no +=1
return render(request, 'reservation.html', {
'allList': allList,
'max_rating': max_rating,
'visitor_no': visitor_no
})
В своем шаблоне вы используете следующее:
<a href="/session/{{visitor_no}}" type="submit" class="btn btn-danger">Kaydet</a>
Если вы собирались использовать это для отправки формы, это не сработает. Она просто ссылается на URL, указанный в атрибуте href.
Попробуйте что-нибудь вроде:
<button type="submit" class="btn btn-danger">Kaydet</button>