Ограничение NOT NULL при создании нового пользователя в django
Я создал Django API для создания нового пользователя. Однако, когда я пытаюсь создать пользователя, я получаю сообщение об ошибке:
IntegrityError at /api/v1/users/register/ NOT NULL constraint failed: accounts_user.user_id
Вот что у меня есть в models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class User(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:
User.objects.create(user=instance)
instance.profile.save()
В serializers.py
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('user_id', 'name', 'location', 'password', 'email', 'signup_confirmation')
и мой views.py
from rest_framework import viewsets
from .serializers import UserSerializer
from .models import User
from rest_framework.decorators import action
from .forms import SignUpForm
from .tokens import account_activation_token
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('name')
serializer_class = UserSerializer
@action (detail=True, methods=['post'])
def register(self, request):
print(request)
Есть идеи, что я могу сделать, чтобы устранить эту ошибку
Как написал Джон в комментарии:
Здесь у вас проблема: fields = ('user_id',...).
Я также советую вам изменить вашу модель User. Если вам не нужно разделение (я полагаю, что не нужно), то гораздо лучше создать свою User с наследованием непосредственно от AbstractUser вместо того, чтобы создавать фактически удвоенные User модели.
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
...
Таким образом, у вас уже есть username, password и email, но вы можете добавить что-нибудь еще в той же модели, вместо того, чтобы использовать user.user и т.д.