Reputation: 11
serialization with django rest framework
models.py
from django.db import models
class University( models.Model ):
name = models.CharField( max_length = 50 )
createdTime = models.DateTimeField( auto_now_add=True )
updatedTime = models.DateTimeField( auto_now_add=True )
class Meta:
verbose_name = "University"
verbose_name_plural = "Universities"
def __unicode__( self ):
return self.name
class Student( models.Model ):
first_name = models.CharField( max_length = 50 )
.......
university = models.ForeignKey( University )
.......
@property
def get_lookupName( self ):
return self.first_name + self.last_name
class Meta:
verbose_name = "Student"
verbose_name_plural = "Students"
def __unicode__( self ):
return '%s %s' % ( self.first_name , self.last_name )
serializers.py
from rest_framework import serializers
from .models import University, Student
class UniversitySerializer( serializers.ModelSerializer ):
class Meta:
model = University
fields = ( 'id' , 'name' )
class StudentSerializer( serializers.ModelSerializer ):
class Meta:
model = Student
When i do a get on /students/1 i get this representation in json
{
"id": 1,
"first_name": "Alok",
"last_name": "Kumar",
..........
"email_alt2": "[email protected]",
"university": 1
}
but i want this representation :
{
"id": 1,
"first_name": "YYYYYY",
........
"email_alt2": "[email protected]",
"university": {
"id": 1,
"name": XXXXX"",
"links":[
{
"rel": "self",
"href": ".....api/universities/1"
}
]
}
}
Will i need to write a custom serializer for this ?
Upvotes: 1
Views: 944
Reputation: 3506
Your Unviersity serializer is not icluded in StudentSerializer, so you have to add this.
class UniversitySerializer( serializers.ModelSerializer ):
class Meta:
model = University
fields = ( 'id' , 'name' )
class StudentSerializer( serializers.ModelSerializer ):
# you need to add this
university = UniversitySerializer(many=False,read_only=True)
class Meta:
model = Student
Upvotes: 1
Reputation: 2213
Try drf's hyperlinkedmodelserializer. Your serializer may look like below.
from rest_framework import serializers from .models import University, Student
class UniversitySerializer( serializers.ModelSerializer ):
class Meta:
model = University
fields = ( 'id' , 'name' )
class StudentSerializer( serializers.HyperlinkedModelSerializer ):
class Meta:
model = Student
If you want more example you can find a simple one here
Upvotes: 0