2016-11-18 41 views
0

我是Django的新手,我試圖模擬類似於: 「Field」:[{「opt1」:val1,「opt2」:val2},{「opt1」:val1, 「OPT2」:VAL2}]。在Django中的模型陣列

class Test(models.Model): 
    Name = models.TextField(required=True) 
    Specialty = models.???? 

我該寫什麼? P.S.我使用的MongoDB數據庫和PyMongo

回答

0

首先使用

pip install jsonfield 

安裝jsonfield然後

from jsonfield import JSONField  
data = JSONField(blank=True, null=True) 
+0

以哪種方式我可以定義「opt1」,「opt2」等等。如果您提供一些關於如何做的細節,應該更好,因爲我對django知之甚少,而且我無法找到django + mongodb – CiroRa

+0

爲什麼使用jsonfield? –

+0

我沒有補充說我在使用Mongo。所以這些答案與目前的問題 – CiroRa

1

我試圖像模式: 「現場」:[{ 「opt1」:val1,「opt2」:val2},{「opt1」:val1,「opt2」:val2}]。

Django模型是關係數據庫的封裝。關係數據庫沒有多值字段,他們使用關係代替 - 在這種情況下是一對多的關係。 IOW,則需要另一種模式爲你的選擇有一個ForeignKey你的模型,即:

class Test(models.Model): 
    name = models.TextField(required=True) 

class Option(models.Model): 
    test = models.ForeignKey(Test, related_name="options") 
    opt1 = models.CharField(...) 
    opt2 = models.CharField(...) 

然後你就可以訪問你的選擇直通test.options.XXX,即:

t = Test.objects.create(name="test") 
# list existing options 
print t.options.all() 
# add an option 
t.options.create(opt1="foo", opt2="bar") 

更多的文檔herehere ... 。

可以使用一些可用的JSONField實現的,但你會失去在路上不少東西(在OP查詢tions值 - 除非使用PostgreSQL - 數據庫和模型級別的限制等,automagic管理和模型形式等)。

+0

不一致,你是對的,我的錯誤。我使用MongoDB作爲DB – CiroRa

+0

噢,那麼這是另一個問題 - 我無能爲力。 –

+0

謝謝你的方式 – CiroRa