2013-02-15 11 views
9

io sono sempre un problema in Django serializzazioneDjango: <django.utils.functional .__ proxy__ oggetto alla 0x7feaac2761d0> non è JSON serializzabile

Ecco il mio modello per lo stato

class State(models.Model): 
    class Translation(translation.Translation): 
     name = models.CharField(max_length=64) 

    capital  = models.ForeignKey('City', related_name="state_capital", null=True) 
    country  = models.ForeignKey(Country, related_name="state_country", null=True) 
    latitude = models.DecimalField(max_digits=9, decimal_places=6, default=Decimal("0.0")) 
    longitude = models.DecimalField(max_digits=9, decimal_places=6, default=Decimal("0.0")) 
    code  = models.CharField(max_length=2) 

Sulla base di county_id sto filtrando il nome degli stati e ho provato a convertire in formato json in modo da poter aggiornare la casella di selezione.

Ma sto ottenendo mentre sto facendo questo.

<django.utils.functional.__proxy__ object at 0x7feaac2761d0> is not JSON serializable 

Ecco le mie opinioni.

def get_getstate(request): 
    catid = request.GET['catid'] 
    get_related_subcategory = State.objects.filter(country_id = catid) 

    json_models = serializers.serialize("json", get_related_subcategory) 
    return HttpResponse(json_models, mimetype="application/javascript") 

Per favore aiutatemi a risolvere questo errore.

Aggiornamento

Ho anche provato come questo

from django.core.serializers.json import Serializer as JSONSerializer 
import decimal 
import json 
class DecimalEncoder(json.JSONEncoder): 
    def default(self, obj): 
     if isinstance(obj, decimal.Decimal): 
      return '%.2f' % obj # Display Decimal obj as float 
     return json.JSONEncoder.default(self, obj) 


class DecimalSerializer(JSONSerializer): 
    def end_serialization(self): 
     self.options.pop('stream', None) 
     self.options.pop('fields', None) 
     json.dump(self.objects, self.stream, cls=DecimalEncoder, **self.options) 

Con questa visione

def get_getstate(request): 
    catid = request.GET['catid'] 
    get_related_subcategory = State.objects.filter(country_id = catid) 
    my_serializer = DecimalSerializer() 
    print my_serializer.serialize(get_related_subcategory, indent=4) 

risposta

1

Se si sta eseguendo una versione precedente di django allora non si può serializzare QuerySets fuori dalla scatola. Prova

json_models = serializers.serialize("json", list(get_related_subcategory)) 

Potrebbe anche essere la pena di verificare che get_related_subcategory non è vuoto. Quale versione di django stai utilizzando?

+0

Sto usando django 1.4 – masterofdestiny

+0

E la modifica suggerita funziona? – danodonovan

+0

non ancora provato dammi un secondo – masterofdestiny

17

django.utils.functional.__proxy__ oggetto è una traduzione lazy. La documentazione di Django dice che chiamare unicode() con la traduzione lazy come argomento genererà una stringa Unicode nelle impostazioni locali correnti (https://docs.djangoproject.com/en/dev/ref/unicode/#translated-strings). Quando la traduzione è terminata, la serializzazione ha più senso.

+0

ha funzionato per me! Grazie. – viridis

Problemi correlati