2016-07-21 14 views
1

Ich lerne Django und war frustriert durch die Erstellung eines JSON-Feldes in einem Modell. Ich habe versucht, ein Json-Feld in meinem Modell zu erstellen, aber Fehler erhalten: 'Modul' Objekt hat kein Attribut 'JSONField'. Hier ist meine Klasse in models.py:Djano JSON-Feld. 'Modul' Objekt hat kein Attribut 'JSONField'

class Question(models.Model): 
    question_text = models.JSONField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

Ich benutze django 1.9.8 und postgresql 9.2.13. Ich brauche die Tabelle erstellt in Postgresql db hat eine Spalte mit JSON-Typ. Wie kann ich das in der Modellklasse machen? Vielen Dank!

Antwort

3

In den Modellen gibt es keine JSONField. Aber es gibt ein praktisches jsonfield Paket, das verwendet werden kann, um JSONField in Django-Modellen zu verwenden. Um das Paket zu installieren, gehen Sie:

pip install jsonfield 

Einmal installiert, tun:

from jsonfield import JSONField 
from django.db import models 

class Question(models.Model): 
question_text = JSONField(max_length=200) 
pub_date = models.DateTimeField('date published') 
+1

Das wird funktionieren. Aber Sie verlieren tolle Sachen, die Postgres-locked Djangos JSONField like-Indizes und Abfragen auf Json-Daten kommt. –

+0

@Michail Pyrev, also sollte ich postgresql upgraden anstatt das Jsonfield-Modell zu verwenden? Vielen Dank! – Gary

+1

Ja, Kernfunktionalität ist immer die bessere Wahl als Third Party Lib. :) –

5

Es gibt keine JSONField in models Modul, müssen Sie:

from django.contrib.postgres.fields import JSONField 

class Question(models.Model): 
    question_text = JSONField() 

Django doc über JSONField.

+0

Das wird nicht funktionieren sowieso in OP Fall, weil Djangos JSONField verwendet 'jsonb' Typ, der nur in PostgreSQL> = 9.4 . –

+0

@Shang wang, ich habe NameError: Name 'JSONField' ist nicht definiert. – Gary

+0

@Michail Pyrev, ich denke ich sollte auf PostgreSql 9.4 upgraden. – Gary

Verwandte Themen