2016-03-20 25 views
0

Model verilerini JSON'a serileştirmek için Django serializer kullanıyorum.
Örneğin: - Bir alan 'türleri' içeren bir modelim var (CHECKTYPE).
Artık 'types', 'test, test1, test2' gibi virgül (,) ayrılmış öğeleri içerir.Django serializörler - alanlar nitelik değerini ekle/güncelle

I (bir yere view.py olarak) gibi aşağıda Django seri hale kullanıyorum:

gettypes = CHECKTYPE.objects.all() 
mytypes = serializers.serialize("json", gettypes) 
return HttpResponse(mytypes, content_type="application/json") 

Bu aşağıda gibi web sayfasında bana bir JSON verir:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2"}}] 

Şimdi burada ben istiyorum Verileri serileştirmeden önce alanların niteliklerini manipüle edin.
Örneğin: 'tiplerini virgülle ayırırsam listenin son dizini olacak' lasttype 'alanlarına bir tane daha öznitelik eklemek istiyorum. Aşağıda gibi bu yapmaya çalıştık

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2", "lasttype":"test2"}}] 

ama işe yaramıyor:

lasttype = types.split(',')[-1] 

böylece nihai json tepkisi gibi görünmelidir

gettypes = CHECKTYPE.objects.all() 
updated_types = [] 
for mtype in gettypes: 
    mtype.lasttype = mtype.types.split(',')[-1] 
    updated_types.append(mtype) 
mytypes = serializers.serialize("json", updated_types) 
return HttpResponse(mytypes, content_type="application/json") 

Ama bu olmuyor. Bana aynı JSON yanıtını veriyor ve 'lasttype' özelliğini göstermiyor. Bunu başarma olasılığı varsa lütfen bana bildirin.

sayesinde
Shashank'ın

cevap

0

Gönderdiğiniz tepkisini değiştirmek için en iyi yolu dicti değiştirerek ardından dict için json yükleyerek, sonra tekrar json yanıt için veri döker.

0

Serileştirmeden önce alanları değiştirmek yerine, serileştirdikten sonra alanları değiştirmelisiniz. JsonResponse kullanarak

import json 
mytypes = json.loads(serializers.serialize("json", gettypes)) 
updated_types = [] 
for mytype in mytypes: 
    last_type = mytype['fields']['types'].split(',')[-1] 
    mytype['fields']['lasttype'] = last_type 
    updated_types.append(mytype) 
return JsonResponse(updated_types) 

yapabilirsiniz dict veya list yeniden serializing doğrudan json verileri.

beklenen veriler böyle olmalı:

'[{"pk": "xyz00000005", "model": "porttype.CHECKTYPE", "fields": {"lasttype": " test2", "types": "test, test1, test2"}}]' 
+0

teşekkürler. Bu benim sorunumu çözer (listeyi görüntülemek için JsonResponse'de güvenli = False eklemem gerekir). –

+0

İsterseniz, cevabı kabul edilmiş olarak işaretleyebilirsiniz :) – v1k45