【发布时间】:2018-03-01 18:16:57
【问题描述】:
我需要计算一个对象拥有的子对象的数量,并通过对象序列化程序在我的 API 中返回这个值。我还需要计算这些子对象的子集。
我有一个包含子受让人的任务对象。在我的 API 中,当我查询我希望返回以下数据集的任务时:
[
{ label: "Cross the bridge",
count_assigned: 5,
count_completed: 3 },
{ label: "Build a fire",
count_assigned: 5,
count_completed: 2 }
]
我该怎么做?我找到了.annotate() 方法,但该结果在序列化程序类中不可用。
models.py
class Task(models.Model):
label = models.CharField(max_length=255,null=False,blank=False)
class Assignee(models.model):
task = models.ForeignKey(Task, related_name='assignees', on_delete=models.CASCADE, blank=True, null=True)
person = models.ForeignKey(Person, on_delete=models.CASCADE, blank=True, null=True)
completed = models.DateTimeField(null=True,blank=True)
序列化器.py
from rest_framework import serializers
from .models import Task, Assignee
from people.serializers import PersonSerializer
class AssigneeSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
person = PersonSerializer(read_only=True)
class Meta:
model = Assignee
fields = ('id','task','person','completed')
read_only_fields = ['id']
class TaskSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Task
fields = ('id', 'label')
read_only_fields = ['id']
【问题讨论】:
-
您的 API 视图是什么样的?你在使用查看器吗?如果是这样this answer(注意,不是该问题的公认答案)会做你想做的事。
标签: python django django-models django-rest-framework serialization