【发布时间】:2015-09-21 16:40:52
【问题描述】:
我第一次使用 Django Rest Framework,现在我正在尝试获得这样的输出:
{
"qty": 5,
"total": 20,
"items": [
{
"id": 1,
"name": "name_1"
},
{
"id": 2,
"name": "name_2"
}
]
}
来自序列化程序。上面输出中的结果数据来自一个查询集。我想使用序列化程序类中的查询集。如果不在序列化程序中进行查询,我无法获得我想要的结果:
class ResSerializer(serializers.Serializer):
qty = serializers.SerializerMethodField()
items = serializers.SerializerMethodField()
total = serializers.SerializerMethodField()
def get_qty(self, obj):
try:
return Model.objects.filter(...)\
.aggregate(qty=Sum('job__long'))\
.get('qty')
except KeyError:
return 0
def get_items(self, obj):
print 'testing'
def get_total(self, obj):
return 0
class Meta:
fields = ('qty', 'items', 'total')
我这样调用序列化器:
queryset = Model.objects.filter(...)
serialized = ResSerializer(queryset, many=False, context={'current_user': request.user})
但这不是我想要的。有什么建议吗?谢谢。
更新
这是我查询的模型:
class Intermediate(models.Model):
partner = models.ForeignKey('partner.Partner')
job = models.ForeignKey(Job)
joined_at = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
status = models.SmallIntegerField(default=STATUS_ACCEPTED)
reason_index = models.SmallIntegerField('Cancel reason', default=REASON_3)
start_time = models.TimeField(null=True)
end_time = models.TimeField(null=True)
start_date = models.DateField(null=True)
end_date = models.DateField(null=True)
这是视图:
class ResView(CustomAPIView):
authentication_classes = (CustomTokenAuthentication, )
# permission_classes = (PartnerAuthenticatedOnly, ) # Uncomment this on server
def post(self, request, *args, **kwargs):
try:
queryset = JobPartner.objects.filter(...)
serialized = ResSerializer(queryset, many=False, context={'current_user': request.user})
response_success_object(self.response_dic, serialized.data)
return Response(self.response_dic)
except Exception, e:
print e
【问题讨论】:
-
请发表您的模型和观点。
-
@RahulGupta 已更新。
-
qty的值是从不同的模型计算出来的,因为long字段不在Intermediate中吗?items列表是如何计算出来的? -
它来自中级的Job FK。我在那部分编辑了问题。
-
另外,
id和name字段是从哪里计算出来的?
标签: django serialization django-rest-framework