Как написать сериализаторы DRF для желаемого вывода?
необходимо получить следующий вывод, используя приведенную ниже структуру модели
{
"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"
}
]
}
]
}
Таким образом, модель разработана, и я хочу получить вышеуказанный результат, не прибегая к дополнительным запросам к базе данных для каждой записи (n+1). Можно ли этого добиться, используя select_related или prefetch related или что-то еще?
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')
Вы можете действовать следующим образом
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')
Просто убедитесь, что вы используете many=True
в своем представлении для UserSerializer
класса