Как отправить простую переменную/данные в поле модели Django с помощью чистого Javascript/Ajax?
Я хочу вставить целое число в поле класса django, но когда я нажимаю POST, происходит сбой
Более конкретно, есть проблема с отправкой post запроса на сервер django. Когда я нажимаю на кнопку "post", я получаю следующую ошибку в терминале. Я пробовал менять переменные, функции и т.д...
File "/home/nick/Desktop/new_venv/lib/python3.8/site-packages/django/utils/datastructures.py", line 86, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'age'
[08/Dec/2022 11:21:03] "POST /post/ HTTP/1.1" 500 72563
Вот Ajax-скрипт, включающий кнопки и идентификаторы:
<button id="get">Send GET Request</button><br>
<button id="post">Send POST Request</button>
<script>
var csrftoken = '{{ csrf_token }}'
document.getElementById('get').onclick = () => {
const requestObj = new XMLHttpRequest()
requestObj.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText)
}
}
requestObj.open("GET", '/get/')
requestObj.send()
}
document.getElementById('post').onclick = () => {
const requestObj = new XMLHttpRequest()
requestObj.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText)
}
}
requestObj.open("POST", '/post/')
requestObj.setRequestHeader("X-CSRFToken", csrftoken)
// const formdata = new FormData()
// formdata.append('name', 'John')
// formdata.append('age', '17')
// requestObj.send(formdata)
var age = 16;
requestObj.send(age)
}
</script>
файл Views.py
Это функции маршрутов
def home_page(request):
return render(request, 'home.html', {})
def get_request(request):
return HttpResponse("Hello World!")
def post_request(request):
if request.method == "POST":
age = request.POST['age'] # trying to insert the value
new_age = Age.objects.all()
new_age = Age(age = age)#New instance
new_age.save()#saving the instance
return HttpResponse("POST request") # return the httpResponse
файл models.py
класс Модель
from django.db import models ##including the models
class Age(models.Model):
age = models.IntegerField(default = 1) # the integer field
файл urls.py включает в себя все маршруты
urlpatterns = [
path('admin/', admin.site.urls),
path('home/', home_page),
path('get/', get_request),
path('post/', post_request),
]
Я испробовал множество способов изменить тип данных в функции send, но безуспешно. Я ожидаю вставить целое число в целочисленное поле класса Age.
Я нашел много примеров с jQuery, что является самым коротким путем, но как я могу выполнить задачу с помощью ванильного Javascript?
Что я делаю не так?