2010-10-27 6 views
0

J'ai vue qui retourne une liste d'envois codés comme JSON ...Comment inclure une annotation dans une chaîne JSON?

def get_new_shipments(request): 
    # ... 
    shipments = Shipment.objects.filter(filter).exclude(**exclude).order_by(order) \ 
     .annotate(num_bids=Count('bids'), min_bid=Min('bids__amount'), max_bid=Max('bids__amount')) 
    return json_response(shipments) 

def json_response(data): 
    response = HttpResponse(mimetype='application/json') 
    serializer = serializers.get_serializer("json")() 
    data = list(data) 
    serializer.serialize(data, ensure_ascii=False, stream=response) 
    return response 

Mais je ne vois pas ces annotations dans le JSON partout ... Comment puis-je les obtenir à inclure ?

Répondre

1

Cela semble fonctionner:

return HttpResponse(simplejson.dumps(list(shipments.values()), ensure_ascii=False, default=json_formatter), mimetype='application/json') 

def json_formatter(obj): 
    if isinstance(obj, datetime.datetime): 
     return obj.isoformat() 
    elif isinstance(obj, Decimal): 
     return unicode(obj) 
    else: 
     raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj)) 

credit

Questions connexes