简体   繁体   中英

django rest-framework serializer reverse relation

I am programming django based web site using django rest-framework. I want to use rest-framework to get model's data.

this is my model.py

class TimeTable(models.Model):
    subject_name = models.CharField(max_length=50)
    subject_code = models.CharField(max_length=10, unique=True)
    classification = models.CharField(max_length=50)
    professor = models.CharField(max_length=50)
    department = models.CharField(max_length=50)
    credit = models.CharField(max_length=1)
    year = models.CharField(max_length=4, default='2018')
    semester = models.CharField(max_length=1, default='1')

    def __str__(self):
        return self.subject_code + '-' + self.subject_name

class Class(models.Model):
    owner = models.ForeignKey(Profile, null=True)
    timetable = models.ForeignKey(TimeTable, null=True)
    grade = models.FloatField()

this is serializer.py

class TimeTableSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = TimeTable
        fields = ('url', 'subject_name', 'subject_code', 'classification', 'professor', 'department', 'credit', 'year', 'semester')

class ClassSerializer(serializers.HyperlinkedModelSerializer):
    timetables = TimeTableSerializer(read_only=True)
    class Meta:
        model = Class
        fields = ('url','owner', 'timetable', 'grade', 'timetables')

I want to get JSON response Like this ( http://localhost:8000/api/classes/ )

[
    {
        "url": "http://localhost:8000/api/classes/8/",
        "owner": "http://localhost:8000/api/profiles/19/",
        "timetable": "http://localhost:8000/api/timetables/3/",
        "grade": 4.5
        "timetables": {
                          "url": "http://localhost:8000/api/timetables/3/",
                          "subject_name": "Artificial Inteligence",
                          "subject_code": "3413513413",
                          "classification": "major",
                          "professor": "John Lee",
                          "department": "software",
                          "credit": "3",
                          "year": "2018",
                          "semester": "1"
                      }
    }
]

but i got this

[
    {
        "url": "http://localhost:8000/api/classes/8/",
        "owner": "http://localhost:8000/api/profiles/19/",
        "timetable": "http://localhost:8000/api/timetables/3/",
        "grade": 4.5
    }
]

How Can I get TimeTable's JSON data in Class JSON??

class ClassSerializer(serializers.HyperlinkedModelSerializer):
    timetable = TimeTableSerializer(read_only=True)
    class Meta:
        model = Class
        fields = ('url','owner', 'timetable', 'grade')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM