2012-05-08 42 views
5

Istnieje kilka pytania z prośbą o już tego samego. Ale są od 2010 roku i nie pomogło mi to tak bardzo. Więc myślę, że to może być aktualizacja do tego frontu od 2010 roku?Django serializacji kluczy obcych obiektów

W google znalazłem to link, które wyjaśniają użycie natural keys. Jednak mój problem dotyczy pobierania ciał obcych z django.contrib.auth.models.User, więc to nie pomaga.

Mój problem jest następujący. Chcę serializować QuerySet, więc dostaję również obiekty kluczy obcych, ponieważ chcę przekazać je jako JSON do klienta. Serializator z django.core tego nie robi. Tak więc w moim przypadku po prostu problem dodałem kolejne pole do modelu, aby zawierało wartość, jakiej potrzebuję od obcego obiektu. Wprowadza jednak nadmiarowe dane.

Mój przykładowy model zawiera username, który chciałbym, jeśli to możliwe, usunąć, a zamiast tego pobrać go za pomocą klucza obcego.

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

Odpowiedz

6

Jednym z możliwych sposobów jest skonstruowanie własnego obiektu słownikowego na podstawie wyników zapytania. Zrobiłbyś coś takiego:

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') 

Musisz zaimportować json, aby działało.

import json 
+0

Hmm, nie myślałem o tym. Dzięki za wskazówkę – starcorn

+1

Bez problemu. Serializator Django zdecydowanie wydaje się nieco ograniczony. Możesz też spróbować użyć tego: http://code.google.com/p/wadofstuff/wiki/DjangoFullSerializers – bento