La serializzazione JSON Django Queryset con valori di essere chiamato. C’è qualcosa di sbagliato con il mio approccio?

Qui è il problema: Django serializzatore non supporta i dizionari e simplejson non supporta Django Querysets. Vedere La Serializzazione JSON Django Modelli con simplejson

Mi chiedevo se c’è qualcosa di sbagliato con la mia soluzione. Ho qualcosa di simile:

people = People.objects.all().values('name', 'id')
json.dumps(list(people))

Io sono ancora un principiante con Python/Django. Il casting è l’ QuerySet di una lista è una cattiva idea? È più efficiente utilizzare il DjangoJSONEncoder suggerito nell’altro topic?

  • Questo non produrre l’output desiderato? Che output ti piacerebbe avere?
  • Funziona e ha l’output desiderato. Mi chiedevo se è il migliore approccio.
InformationsquelleAutor pllee | 2011-08-12

 

One Reply
  1. 13

    La soluzione è totalmente valido e molto buone a mio parere.

    Se avete bisogno di una lista di liste (invece di un elenco di dizionari), è possibile utilizzare anche:

    from django.utils import simplejson
    
    people = People.objects.all().values_list('name', 'id')
    simplejson.dumps(list(people))

    A volte, quando l’output json è molto complesso, di solito si usa un template json con il *render_to_string* funzione, ad esempio:

    context = {'people': People.objects.all().values('name', 'id')}
    render_to_string('templates/people.json', context, context_instance=RequestContext(request))

    Il modello persone.json potrebbe essere:

    [
     {% for person in people %}
        {"name": {{ person.name }}, "id": {{ person.id }} }
        {% if not forloop.last %} , {% endif %}
     {% endfor %}
    ]

    Ma l’uso di modelli è riservato per i casi più complessi rispetto al tuo. Io penso che per il più facile dei problemi di una buona soluzione è quella di utilizzare simplejson.discariche funzione.

    • Non vorrei raccomandare che chiunque l’utilizzo di questa soluzione. Come scritto, non funzionerà, perché ha bisogno di citazioni, ma anche se si aggiunto quotazioni si avrebbe bisogno di assicurarsi che le corde sono sfuggiti secondo gli standard JSON. Non c’è bisogno di reinventare il serializzatore JSON se è fornito dalla vostra lingua.

Lascia un commento