自从提出这个问题以来已经两年了,所以对于OP来说显然已经晚了。但是对于像我一样有类似困境的其他人来说,存在一种活塞式的方式来完成这项工作。
使用民意调查和选择的 Django 示例 -
您会注意到对于 ChoiceHandler 的 JSON 响应是:
[
{
"votes": 0,
"poll": {
"pub_date": "2011-04-23",
"question": "Do you like Icecream?",
"polling_ended": false
},
"choice": "A lot!"
}
]
这包括相关民意调查的整个 JSON,而只是id
for 它本来可以同样好,如果不是更好的话。
假设所需的响应是:
[
{
"id": 2,
"votes": 0,
"poll": 5,
"choice": "A lot!"
}
]
以下是您将如何编辑处理程序以实现此目的:
from piston.handler import BaseHandler
from polls.models import Poll, Choice
class ChoiceHandler( BaseHandler ):
allowed_methods = ('GET',)
model = Choice
# edit the values in fields to change what is in the response JSON
fields = ('id', 'votes', 'poll', 'choice') # Add id to response fields
# if you do not add 'id' here, the desired response will not contain it
# even if you have defined the classmethod 'id' below
# customize the response JSON for the poll field to be the id
# instead of the complete JSON for the poll object
@classmethod
def poll(cls, model):
if model.poll:
return model.poll.id
else:
return None
# define what id is in the response
# this is just for descriptive purposes,
# Piston has built-in id support which is used when you add it to 'fields'
@classmethod
def id(cls, model):
return model.id
def read( self, request, id=None ):
if id:
try:
return Choice.objects.get(id=id)
except Choice.DoesNotExist, e:
return {}
else:
return Choice.objects.all()