Ограничение NOT NULL не удалось при попытке POST данных в Django API
У меня есть проект с двумя приложениями: приложение React для front-end и Django для backend.
Я создал свою страницу регистрации в React, а процесс регистрации в Django. Я хотел бы соединить эти два процесса, чтобы пользователь мог пройти через созданную мной страницу регистрации и чтобы пользователь был создан на основе информации, предоставленной пользователем.
Вот мой models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100, blank=True)
location = models.CharField(max_length=100, blank=True)
password = models.CharField(max_length=32)
email = models.EmailField(max_length=150)
signup_confirmation = models.BooleanField(default=False)
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def update_profile_signal(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
Serializers.py:
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Profile
fields = ('user_id', 'name', 'location', 'password', 'email', 'signup_confirmation')
и функция POST в React
const onSubmit = e => {
e.preventDefault();
const user = {
email: email,
name: name,
location: 'Example',
password: password,
user_id: 1,
};
console.log(user);
fetch('http://127.0.0.1:8000/api/v1/users/profiles/?format=api', {
method: 'POST',
headers: {
'Content-Type':'application/json'
},
body: JSON.stringify(user)
})
.then(res => res.json())
.then(data => {
if (data.key) {
localStorage.clear();
localStorage.setItem('token',data.key);
window.location.replace('http://localhost:3000/profile/');
} else {
setEmail('');
setName('');
setPassword('');
localStorage.clear();
setErrors(true);
}
});
};
Проблема в том, что когда я пытаюсь создать пользователя, я получаю это сообщение об ошибке в Django
django.db.utils.IntegrityError: NOT NULL constraint failed: accounts_profile.user_id
и когда я проверяю свой сетевой инспектор, я получаю сообщение Status code 500: Internal Server Error. При дальнейшей проверке (перейдя к предварительному просмотру) я вижу следующее
IntegrityError at /api/v1/users/profiles/
NOT NULL constraint failed: accounts_profile.user_id
Я также проверил, что я получу, если я буду вести консольный лог res.text внутри моего fetch() и вот что я получу:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="robots" content="NONE,NOARCHIVE" />
<title>Profile List – Django REST framework</title>
...
Есть идеи, где я могу ошибиться?
Идентификатор пользователя '1', вероятно, уже выделен. Попробуйте следующее:
python manage.py shell
>>> from django.contrib.auth.models import User
>>> u = User.objects.all
Затем посмотрите, какие идентификаторы пользователей уже выделены. В любом случае, я бы начал именно с этого.