2016-03-24 16 views
0

Django 1.9 Python3.5Handhabung JSON-Antwort mit Django

ich tastypie bin mit einem externen api verbrauchen

ich eine Klasse erschaffe die Json Antwort von einem erholsamen api zu handhaben. Ich kenne die Datentypen, die von der API zurückkommen, weiß aber nicht, wie man einige von ihnen deklariert.

Dies ist, wie ich sie in Golang erklären

PosterPath  string `json:"poster_path"` 
    Adult   bool `json:"adult"` 
    Overview   string `json:"overview"` 
    ReleaseDate  string `json:"release_date"` 
    GenreIds   []int `json:"genre_ids"` 
    Id    int  `json:"id"` 
    OriginalTitle string `json:"original_title"` 
    OriginalLanguage string `json:"original_language"` 
    Title   string `json:"title"` 
    BackdropPath  string `json:"backdrop_path"` 
    Popularity  float64 `json:"popularity"` 
    VoteCount  int  `json:"vote_count"` 
    Video   bool `json:"video"` 
    VoteAverage  float64 `json:"vote_average"` 

Von meinem Verständnis ist dies, wie ich sie mit DJjango

class Movies(Resource): 
    PosterPath = fields.URLField(attribute='poster_path') 
    Adult = fields.BooleanField(attribute='adult') 
    Overview = fields.CharField(attribute='overview') 
    ReleaseDate = fields.CharField(attribute='release_date') 
    GenreIds = fields.**Array of Ints**(attribute='genre_ids') 
    Id = fields.IntegerField(attribute='id') 
    OriginalTitle = fields.CharField(attribute='original_title') 
    OriginalLanguage = fields.CharField(attribute='original_language') 
    Title = fields.CharField(attribute='title') 
    BackdropPath = fields.URLField(attribute='backdrop_path') 
    Popularity = fields.DecimalField(attribute='popularity') 
    VoteCount = fields.IntegerField(attribute='vote_count') 
    Video = fields.BooleanField(attribute='video') 
    VoteAverage = fields.DecimalField(attribute='vote_average') 

GenreIds = fields.**Array of Ints**(attribute='genre_ids') 

Es ist ein Dieses Feld erklären sollte Array von Ints. Was ist der richtige Weg, um den JSON dieses Typs zu behandeln? Es sieht so aus,

"genre_ids": [ 
     18, 
     10402 
     ], 

Antwort

1

Es ist Postgres spezifische ArrayField in django. Sie können auch resceived array in string umwandeln und in CommaSeparatedIntegerField speichern, das db agnostic ist.

PS: Ich glaube, Sie verwenden Modelle falsch. Feld Klassen sollten über 'Modelle' Modul, aber nicht 'fileds' Modul (das heißt models.BooleanField statt fields.BooleanField)

+0

ich tastypie bin mit zugegriffen werden. Ich baue kein Modell Ich verwende eine externe API für eine JSON-Antwort. Ist ArrayField auch dynamisch in der Größe? Gibt es keine Möglichkeit, ein ListField zu erstellen? – wuno

+0

Ja, das ArrayField ist dynamisch. Initialisiere als Liste 'times = ArrayField (models.DateTimeField(), default = list)' und füge es wie gewohnt hinzu. – Ben