Reputation:
need to get the following output using the below given model structure
{
"User": [
{
"id": 1,
"name": "XYZ",
"Task": [
{
"id": "1",
"task_name": "task 1"
},
{
"id": "2",
"task_name": "task 2"
}
]
},
{
"id": 2,
"name": "ABC",
"Task": [
{
"id": "1",
"task_name": "task 1"
}
]
}
]
}
This is how the model is designed and I want the above output without dealing with extra database query for each record (n+1). Can this be achieved using select_related or prefetch related or something else?
class User(models.Model):
name = models.Charfield()
class Task(models.Model)
task_name = models.Charfield()
class UserTask(models.Model):
user = models.Foreignkey(User, related_name = 'user')
task = models.Foreignkey(Task, related_name = 'tasks')
Upvotes: 1
Views: 139
Reputation: 1211
You can proceed this way
class TaskSerializer(ModelSerializer):
class Meta:
model=Task
fields = '__all__'
class UserTaskSerializer(ModelSerialzier):
id = serializer.CharField(source ='user.id')
name = serializer.CharField(source ='user.username') # might be username,fullname or name only change in your own way
task = TaskSerializer(many=true)
class Meta:
model=UserTask
fields = ('id','name','task')
Just make sure you are using many=True
in your view for UserSerializer
class
Upvotes: 1