Html-форма в Django возвращает none
Я пытаюсь сохранить эту HTML форму в моей таблице в базе данных, но получаю ошибку "None". Я занимаюсь этим уже около часа. Пожалуйста, любая помощь будет оценена по достоинству
Пожалуйста, как мне это исправить
Это HTML order.html, который я создал
<form action="" method="post" id="payment-form">
<input type="text" class="form-control" id="first_name"
name="first_name"
value="{{request.user.first_name}}">
<textarea type="text" class="form-control" id="address" name="address"
placeholder="1234 Main St" required></textarea>
<button id="submit" class="btn btn-success lg w-100 fw-bold" >
Proceed to Payment
</button>
</form>
Вот мой views.py
def add(request):
basket = Basket(request)
if request.POST.get("action") == "post":
order_key = request.POST.get("order_key")
user_id = request.user.id
baskettotal = basket.get_total_price()
first_name = request.POST.get("first_name")
last_name = request.POST.get("last_name")
address = request.POST.get("address")
print(first_name, last_name, address)
order = Order.objects.create(
first_name = first_name,
address=address,
total_paid=baskettotal,
)
order_id = order.pk
response = JsonResponse({"success": "Order created"})
return response
Файл js
<script type="text/javascript">
function makePayment(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: '{% url "order:add" %}',
data: {
csrfmiddlewaretoken: "{{csrf_token}}",
action: "post",
},
success: function (json) {
console.log(json.success)
},
error: function (xhr, errmsg, err) {},
});
}
</script>
Прежде всего, вам не нужно размещать дополнительное значение action для определения запроса, вам просто нужно использовать request.method
он вернет вам все доступные методы, вы можете проверить конкретный метод, добавив проверку следующим образом
if request.method == "POST":
примечание : всегда используйте метод с заглавной буквы при добавлении этой проверки
и я не уверен, где вы вызываете функцию makePayment()
, и к каким бы данным вы не пытались получить доступ в вашем скрипте python, вы должны передать их через ajax{data:{}}
вот так
function makePayment(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: '{% url "order:add" %}',
data: {
csrfmiddlewaretoken: "{{csrf_token}}",
order_key : "your order key",
first_name : $('#first_name').val(),
last_name : $('#last_name').val(),
address : $('#address').val()
},
success: function (json) {
console.log(json.success)
},
error: function (xhr, errmsg, err) {},
});
}
и затем получить доступ к нему следующим образом
def add(request):
basket = Basket(request)
if request.method == "POST":
order_key = request.POST.get("order_key")
#....all other fields