[WL::Techniek] Filters & json

Rick van der Zwet info at rickvanderzwet.nl
Tue May 31 06:51:51 UTC 2011


2011/5/30 Dennis Wagenaar <d.wagenaar at gmail.com>:
> 2011/5/28 Rick van der Zwet <info at rickvanderzwet.nl>
>>
>> 2011/5/26 Dennis Wagenaar <d.wagenaar at gmail.com>:
>> > Zou je mij even een zetje in de goede richting kunnen geven?
>>
>> Ik ben even kwijt wat je precies probeert te bereiken, kan je toch nog
>> een static voorbeeld geven (kunnen ook een paar ingescande schetsen
>> zijn).
>
> Ja, ik bedoel dus de selectie. Eigenlijk precies dit:
> http://www.dynamicdrive.com/dynamicindex16/chainedselects/index.htm

Ah nu snap ik :-)

>>
>> > Ik probeer een JSON object te maken die resultaten uit meerdere django
>> > queries bevat. Het leek me wel handig om zo de filters dynamisch te
>> > maken
>> > (dat als je bijv. bij gebruiker 'Piet' selecteerd, je bij meetrondje ook
>> > alleen Piet's rondjes kan selecteren, en vervolgens de nodes die bij dat
>> > rondje zijn gemeten).
>> >
>> > Wat ik dus ong. wil bereiken:
>> >
>> > [ { "gebruiker" : Piet, 'meetrondje' : [ { 'naam' : rondje1, 'nodes' : {
>> > 'ssid' : test1, 'ssid' : test2 }}, { 'naam' : rondje2 ...} ], {
>> > "gebruiker"
>> > : Jan ...} ]
>>
>> Kan moet je zelf die structuur maken en encoderen: zie voorbeelden op:
>>     http://simplejson.github.com/simplejson/
>
> Ik heb hier al een beetje omheen gewerkt door nu elke json apart op te
> vragen. Is het beter om het apart te doen, of om zelf de structuur te maken?
>
>>
>> > Nu lukt het wel om resultaten van enkele queries in JSON te zetten en te
>> > gebruiken voor de filters (zie de nodelijst filter in de laatste rev.),
>> > maar
>> > ik kan niet echt een praktische manier vinden om resultaten van meerdere
>> > queries in een JSON te zetten.
>>
>> Kan je een voorbeeld geven hoe je de queries wilt combineren?
>
> Gebruiker.objects.values('naam', 'meetrondje__naam', 'meetrondje__datum')
>
> Maar dit krijg ik niet in JSON omgezet:
>
>>>> lijst = Gebruiker.objects.values('naam', 'meetrondje__naam',
>>>> 'meetrondje__datum')
>>>> from django.core import serializers
>>>> serializers.serialize('json', lijst)
>  ...
> AttributeError: 'dict' object has no attribute '_meta'
>
> Ditzelfde maar dan met Gebruiker.objects.all() werkt wel.
>
> Met simplejson:
>>>> import simplejson
>>>> simplejson.dumps(lijst)
>  ...
> TypeError: [<Gebruiker: username - foo at bar.org>, <Gebruiker: test -
> test at tes.tt>] is not JSON serializable

Je moet de objecten ``masseren'' om ze in een goede dataset te krijgen
welke je kan converteren naar json. Gewoon een ``volledig'' Django
Object naar json converteren levert problemen op, vanwege alle meta
informatie die geconverteerd wordt  (welke nodig is om twee django
instanties met elkaar te laten praten). In r9224 heb ik een voorbeeld
gecommit van dit ``masseren''.

Gr. /Rick
-- 
http://rickvanderzwet.nl



More information about the Techniek mailing list