Использовать create_serializer внутри другого create_serializer в drf

У меня есть три модели:

class Person(models.Model):
    name = models.CharField(max_length=255)
    age = models.IntegerField()

class OrganisationBenefits(models.Model):
    person = models.Foreignkey(Person, on_delete=models.CASCADE)
    benefits = models.CharField(max_length=255)

class ProjectsInvolved(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    projects = models.CharField(max_length=255)

Я получаю данные из фронтенда в следующем виде:

{
"name": "John Doe",
"age": "30",
"organisation_benefits": [
    {
        "benefits": "dummy"
    },
    {
        "benefits": "dummy" 
    }
],
"projects_involved": [
    {
        "project": "dummy",
  
    },
    {
        "project": "Dummy"
    }
]}

Я получаю данные(request.data) из моих представлений в мой сериализатор как validated_data. Сериализатор выглядит примерно так:

class PersonDetailsCreateSerializer(serializers.ModelSerializer):

    benefits = serializers.ListField(required=False)
    projects = serializers.ListField(required=False)

    class Meta:
        model = Person
        fields = '__all__' 

    def create(self, validated_data):
        benefits = validated_data.pop('benefits')
        projects = validated_data.pop('projects')

        person = person.objects.create(**validated_data)
        for benefit in benefits:
            benefit.update({'person': person})
    
        serializer_benefit = BenefitCreateSerializer(data=benefits, many=True)
        if serializer.is_valid():
            serializer.save()

        for project in projects:
            project.update({'person': person})

        serializer_project = ProjectCreateSerializer(data=projects, many=True)
        if serialzer_project.is_valid():
            serializer_project.save()

        return person

Правильный ли это подход? Потому что создается только экземпляр персоны, но не льготы и проекты. Я даже не уверен, могу ли я вызвать другой сериализатор create внутри def create() другого сериализатора. Я запутался в этом моменте. Вместо этого, когда я использую цикл for и вызываю Model_name.objects.create(), он работает в соответствии с моими ожиданиями. Но я не хочу использовать цикл for.

Любая помощь будет очень признательна.

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