Как создать несколько типов пользователей в Django без использования форм

Я хочу создать 2 типа пользователей - Customer и Company, у обоих разные параметры. Я перерыл почти все, но все используют отношения полей OneToOne и используют формы django. Я новичок в django и просто хочу создать API, а не какой-нибудь HTML.

Это мои модели -

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    name = models.CharField(max_length=100)
    email = models.EmailField(_('email address'), unique=True)

class Company(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    company_name = models.CharField(max_length=100)
    company_email = models.EmailField(_('email address'), unique=True)

Я создал сериализатор для моего пользовательского пользователя с именем UserSerializer и использовал его в сериализаторе моей модели.

class CustomerSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=True, read_only=True)
    class Meta:
        model = Customer
        fields="__all__"

class CompanySerializer(serializers.ModelSerializer):
    user = UserSerializer(many=True, read_only=True)
    class Meta:
        model = Company
        fields="__all__"

Ниже приведен мой файл views.py для клиента -

class register(APIView):
def post(self, request, format=None):
    
    user_serializer = UserSerializer(data=request.data)
    if user_serializer.is_valid():
        user = User.objects.create_user(email=request.POST.get('email'),
                                contact=request.POST.get('contact'),
                                is_staff=request.POST.get('is_staff'),
                                is_superuser=request.POST.get('is_superuser'))
        customer_serializer = CustomerSerializer(data=request.data)
        if customer_serializer.is_valid():
            customer_serializer.save()
            return Response(customer_serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(customer_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

В этом коде я получаю ошибку - "Column 'user_id' cannot be null".

user_id является внешним ключом в Customer, связанным с пользователями. Но при регистрации создается пользователь и ему присваивается случайный id. Я не могу указать идентификатор пользователя в поле ввода.

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