user9914165
user9914165

Reputation:

how to write DRF serializers for the desired output?

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

Answers (1)

lord stock
lord stock

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

Related Questions