Мой API отправляет данные, но они не сохраняются в бэкенде
Итак, я следовал этому руководству https://youtu.be/hISSGMafzvU, с другим моим подходом (вместо того, чтобы быть приложением для работы, я пытаюсь сделать из него систему управления клиникой).
Итак, проблема, с которой я столкнулся, заключается в том, что мой api получает данные, и нет никаких ошибок, плюс я получаю код состояния 200 от локального сервера, что означает, что все в порядке, но это не так, следовательно, данные не сохраняются в БД по какой-то причине.
вот код:
models.py
class Employee(models.Model):
fullname = models.CharField(max_length = 250)
age = models.DateField(null=True, blank=True)
gender = models.CharField(max_length=10,
choices=(('Male', 'Male'), ('Female', 'Female')), default='Male')
usertype = models.CharField(max_length = 50, choices=
(('Admin','Admin'),('Doctor','Doctor'),('Receptionist','Receptionist')),
default='Receptionist')
def __str__(self):
return self.fullname
class Patient(models.Model):
fullname = models.CharField(max_length = 250)
def __str__(self):
return self.fullname
class Appointments(models.Model):
Paitent_Attending = models.ForeignKey(Patient, on_delete= models.CASCADE)
Doctor_Attending = models.ForeignKey(Employee, on_delete= models.CASCADE)
appointment_date = models.DateField()
def __str__(self):
return self.Paitent_Attending.fullname
serializers.py
from rest_framework import serializers
from .models import Employee,Patient,Appointments
class PatientSerializers(serializers.ModelSerializer):
class Meta:
model = Patient
fields = '__all__'
class EmployeeSerializers(serializers.ModelSerializer):
class Meta:
model = Employee
fields = '__all__'
class AppointmentsSerializers(serializers.ModelSerializer):
class Meta:
model = Appointments
fields = '__all__'
views.py
JS, который отправляет данные через fetch api.
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
const csrftoken = getCookie('csrftoken');
var form = document.getElementById('newPatient');
form.addEventListener('submit', function(e) {
e.preventDefault()
console.log('form submited');
var url = 'http://127.0.0.1:8000/api/add-patient/'
var Fullname = document.getElementById('Fullname').value
fetch(url, {
method: 'POST',
headers:{
'Content-Type': 'application/json',
'X-CSRFToken' : csrftoken,
},
body: JSON.stringify({'Fullname':Fullname})
}
)
})
Я все еще новичок в мире api, я запутался здесь, помогите!
Это одна из тех глупых ошибок, когда вы не фокусируетесь на именах lol.
Имя свойства addPatient
fullname
fetch api пыталась отправить данные на адрес
Fullname
заглавная буква F, которая не существует, в результате чего данные не были сохранены из-за этого кода в views.py
def addPatient(request):
serializer = PatientSerializers(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
сериализатор получал данные, но из-за заглавной буквы F они не соответствовали атрибуту addPatient, который является fullname, а не Fullname, что привело к тому, что сериализатор не был действительным, не выполнив условие оператора if, и не сохранив данные xD, sigh