Django множественные сериализаторы с отношением

У меня есть две таблицы пользователей, и я создаю форму для хранения информации о пользователе.

Models.py

class MyUser(User):
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    expire_date = models.DateField()

Это создаст таблицу с user_ptr_id к таблице auth_user из django.

Я создал два сериализатора: один для User:

class UserSerializer(serializers.ModelSerializer):
    first_name = serializers.CharField(min_length=2, required=True)
    last_name = serializers.CharField(min_length=2, required=True)
    email = serializers.EmailField(min_length=5, required=True)
    password = serializers.CharField(min_length=8, write_only=True, required=True)

    class Meta:
        model = User
        fields = ('email', 'first_name', 'last_name', 'password')

    def create(self, validated_data):
        return UserSerializer(**validated_data)

И класс MyUser:

class MyUserSerializer(serializers.ModelSerializer):
    address = serializers.CharField(max_length=200)
    city = serializers.CharField(max_length=200)

    class Meta:
        model = MyUser
        fields = ('city', 'address')

    def create(self, validated_data):
        return MyUser(**validated_data)

Поскольку я использую Django Rest-Framework-Auth, я хотел бы иметь сериализатор для получения данных, но я не знаю, как заставить эти вещи работать вместе. В классе "MyUserSerializer" я также выполняю множество проверок валидности, которые я опустил здесь, чтобы сохранить код чистым.

Код ниже не работает

class UserSignup(serializers.Serializer):
    user = UserSerializer()
    my_user = MyUserSerializer()
    confirm_psw = serializers.CharField(min_length=8, write_only=True, required=True)

    def validate(self, data):
        if not data["user"].get('password') or not data.get('confirm_psw'):
            raise serializers.ValidationError("Please enter a password and confirm it.")
        if data["user"].get('password') != data.get('confirm_psw'):
            raise serializers.ValidationError("Those passwords don't match.")

        return data

    def save(self, validated_data):
        user_data = self.validated_data["user"]
        my_user = self.validated_data["my_user"]
        return user_data, my_user

    def create(self, validated_data):
        user_data = validated_data.pop('user')
        user = User.objects.create(user_data)
        my_user = validated_data.pop('my_user')
        my_user["user_ptr_id"] = user.id
        MyUser.objects.create(**ua_user)
        return user

Как объединить два сериализатора, чтобы правильно выполнить регистрацию пользователя? Спасибо

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