Сериализатор Django возвращает пустой словарь при создании

У меня есть модель, которая в основном объединяет двух разных пользователей:

class Couple(models.Model):
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False)

    user1 = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        null=True,
        blank=False,
        related_name="user1"
    )

    user2 = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        null=True,
        blank=False,
        related_name="user2"
    )

    def __str__(self):
        return str(self.id)

Далее я создал Serializer, в котором user1 приглашает user2 создать пару. И я хочу сделать это, написав адрес электронной почты пользователя2:

class CreateCoupleSerializer(serializers.Serializer):

    partner_email = serializers.EmailField(write_only=True, max_length=250,
                                           required=True)

    def create(self, validated_data):
        partner_email = validated_data['partner_email']
        try:
            partner = User.objects.get(email=partner_email)
        except Exception:
            partner = None

        if not partner:
            raise serializers.ValidationError(
                {"details": 'User does not exist'})

        if partner.couple_id:
            raise serializers.ValidationError(
                {"details": 'User is already assigned to a couple'})

        user = self.context['request'].user
        couple = Couple.objects.create(user1=user, user2=partner)

        user.couple_id = couple.id
        partner.couple_id = couple.id
        user.save()
        partner.save()

        return couple

А вот мое мнение:

class CreateCoupleView(generics.CreateAPIView):
    serializer_class = CreateCoupleSerializer
    queryset = Couple.objects.all()

Протестировав это, я вижу, что пара создается, что замечательно! Однако в моем теле ответа я получаю пустой словарь вместо нового экземпляра пары.

enter image description here

Мой вопрос - почему это происходит?

Бонусный вопрос: Когда я должен создавать логику в def create() на стороне Serializer и def create() на стороне View?

Заранее спасибо.

Я исправил это, заменив его на serializers.ModelSerializer и определив read_only_fields следующим образом:

class CreateCoupleSerializer(serializers.ModelSerializer):

partner_email = serializers.EmailField(write_only=True, max_length=250,
                                       required=True)

class Meta:
    model = Couple
    fields = '__all__'
    read_only_fields = ('user1', 'user2', )
Вернуться на верх