Прошло два года с тех пор, как был задан этот вопрос, так что, очевидно, уже поздно для ОП. Но для других, у которых, как и у меня, была подобная дилемма, существует Pistonic способ сделать это.
Использование примера опросов и выборов в Django -
Вы заметите, что для ChoiceHandler ответ JSON:
[
{
"votes": 0,
"poll": {
"pub_date": "2011-04-23",
"question": "Do you like Icecream?",
"polling_ended": false
},
"choice": "A lot!"
}
]
Это включает в себя весь JSON для соответствующего опроса, тогда как только id
для него могло бы быть так же хорошо, если не лучше.
Допустим, что желаемый ответ:
[
{
"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()