2012-05-08 17 views
5

Hay un par de preguntas pidiendo lo mismo ya. Pero son de 2010 y no me ayudaron mucho. Entonces me imagino que tal vez haya sido una actualización de este frente desde 2010?Django serializar objetos de clave externa

En google encontré este link, que explican el uso de natural keys. Sin embargo, mi problema se refiere a la obtención de objetos extraños desde django.contrib.auth.models.User, por lo que no ayuda.

Mi problema es el siguiente. Quiero serializar el QuerySet para obtener los objetos de la clave externa también, porque quiero pasarlo como JSON al cliente. El serializador de django.core no hace eso. Entonces, en mi caso simplemente al problema, agregué otro campo al modelo para contener el valor que necesito del objeto extraño. Pero sin embargo introduce datos redundantes.

Mi modelo de ejemplo contiene el username que me gustaría si es posible eliminar, y en su lugar obtenerlo con la clave externa.

user = models.ForeignKey(User) 
    username = models.CharField(max_length=100, null=False) 

Respuesta

6

Una posible forma de evitar esto es construir su propio objeto de diccionario en función de los retornos de un conjunto de preguntas. Haría algo como esto:

queryset = Model.objects.all() 
list = [] #create list 
for row in queryset: #populate list 
    list.append({'title':row.title, 'body': row.body, 'name': row.user.username}) 
recipe_list_json = json.dumps(list) #dump list as JSON 
return HttpResponse(recipe_list_json, 'application/javascript') 

Necesita importar json para que esto funcione.

import json 
+0

Hmm, no pensé en eso. Gracias por la sugerencia – starcorn

+1

No hay problema. El serializador de Django definitivamente parece un poco limitado. También puedes intentar usar esto: http://code.google.com/p/wadofstuff/wiki/DjangoFullSerializers – bento

Cuestiones relacionadas