how to update and create when we have three nested fields coming out from 3 tables/models

45 views
Skip to first unread message

Osama imran

unread,
Jun 24, 2019, 10:20:16 AM6/24/19
to Django REST framework
model.py
from django.db import models

# Create your models here.

class Subject(models.Model):
    subject_name = models.CharField('Subject',max_length=20)

    def __str__(self):
        return self.subject_name 


class Person(models.Model):
    name = models.CharField(max_length=50)
    age = models.PositiveIntegerField()
    male = models.CharField(max_length=20)
    dob = models.DateField()

    def __str__(self):
        return self.name

class Marks(models.Model):

    subject = models.ForeignKey(Subject , on_delete=models.CASCADE)
    student = models.ForeignKey(Person, related_name = 'marks' , on_delete=models.CASCADE)
    term1 = models.IntegerField()
    term2 = models.IntegerField()
    final = models.IntegerField()

    def __unicode__(self):
        return self.subject
serialzers.py
from rest_framework import serializers
from . import models 
from .models import Person, Marks, Subject

class SubjectSerializer(serializers.ModelSerializer):

    class Meta:
        model = Subject
        fields =  "__all__"

class MarksSerializer(serializers.ModelSerializer):

    subject = serializers.CharField()

    class Meta:
        model = Marks
        fields = ('subject','term1','term2','final')
        #depth = 1

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person

        fields = ('id', 'name','age', 'male', 'dob')

# making combine serializer for person and marks
class CombineSerializer(serializers.ModelSerializer):

    marks = MarksSerializer(many= True )

    class Meta:
        model = Person

        fields = ('id', 'name','age', 'male', 'dob','marks')

    def create(self, validated_data):
        marks = validated_data.pop('marks')
        subject = marks['subject']
        person = Person.objects.create(**validated_data)

        for marks in marks:
            Marks.objects.create(person=Person, **marks)
        return Marks
and I want to insert data in this format
[
    {
        "id": 9,
        "name": "javed",
        "age": 2,
        "male": "true",
        "dob": "2019-06-19",
        "marks": [
            {
                "subject": "Maths",
                "term1": 9,
                "term2": 16,
                "final": 8
            }
        ]
    },

Osama imran

unread,
Jun 24, 2019, 10:28:35 AM6/24/19
to Django REST framework
Reply all
Reply to author
Forward
0 new messages