Ограничение 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 и т.д.

Вернуться на верх