2017-07-21 1 views
3

Ich versuche, Fremdschlüssel als Wörterbücher anstelle von Arrays zu serialisieren. Im Augenblick ist die json sieht folgendes:django-restframework serialisiert Relationen als Wörterbücher statt Arrays

{ 
"slug": "en", 
"children": [{ 
     "slug": "pants", 
     "children": [{ 
       "slug": "products/:level1", 
       "children": [{ 
        "slug": ":level2/:level3", 
        "children": [] 
       }] 
      }, 
      { 
       "slug": ":productSlug", 
       "children": [] 
      } 
     ] 
    }, 
    { 
     "slug": "pullovers", 
     "children": [] 
    } 
    ] 
} 

Aber ich möchte es die Schnecken als Schlüssel zu verwenden:

{ 
"en": { 
    "children": { 
     "pants": { 
      "children": { 
       "products/:level1": { 
        "children": { 
         ":level2/:level3": { 
          "children": {} 
         } 
        } 
       } 
      }, 
      ":productSlug": { 
       "children": {} 
      } 
     ] 
    } 
} 
} 

Ist es möglich, dass direkt in den Serialisierer zu tun oder muss ich um es in einem zusätzlichen Schritt zu konvertieren?

Antwort

1

Es ist möglich durch Überschreiben der list serializers und Einstellung list_serializer_class für jeden Serializer, der es erfordert, wie ich in diesem answer vorgeschlagen.

Natürlich müssen Sie es leicht anpassen:

class <YourClass>ListSerializer(serializers.ListSerializer): 
    def to_representation(self, data): 
     r = super().to_representation(data) 

     return { item['<key_field>']: item for item in r } 
+0

Schöne Antwort. Ich musste es ein wenig optimieren, so dass ich es auch für die oberste Ebene verwenden konnte. Bitte schau dir meine Antwort an. – melbic

1

@ Michael Rigonis Antwort (https://stackoverflow.com/a/45238191/270265) war der Schlüssel zum Erfolg. Ich musste es ein wenig zwicken, so dass ich es auch für die Top-Ebene verwenden konnte:

+0

Betrachtet man den DRF-Code, scheint es tatsächlich notwendig zu sein, 'ReturnDict' in' data' zu verwenden. –

Verwandte Themen