Использовать 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.
Любая помощь будет очень признательна.