I've three models:
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)
I'm getting data from frontend as:
{
"name": "John Doe",
"age": "30",
"organisation_benefits": [
{
"benefits": "dummy"
},
{
"benefits": "dummy"
}
],
"projects_involved": [
{
"project": "dummy",
},
{
"project": "Dummy"
}
]}
I'm getting data(request.data) from my views into my serializer as validated_data. The serializer looks something like this:
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
Is this the right approach? Because only person instance is getting created but not benefits and projects. I'm not even sure if I can call another create serializer inside def create() of another serializer. I'm confused at this moment. Instead of this, when I use a for loop and call Model_name.objects.create(), its working as per my expectations. But don't want to user a for loop.
Any help would be much appreciated.