2014-02-15 47 views
0

我是相當新的Django和Django orm。我需要像模式:Django模型 - 是否有合理的解決方案來處理子字符作爲Django模型中的字段

或在Python代碼僞:

class Settings(Model): 
    subsettings1 = somekindofdictfield({key:fields.BooleanField(), key:fields.BooleanField()}) 
    subsettings2 = somekindofdictfield({key:fields.BooleanField(), key:fields.BooleanField()}) 

我試圖avoide不必有獨立的類對每種subsettings的。這可以是動態的。所以這個解決方案看起來不對:

class Settings(Model): 
    subsettings1 = ForeignKey(SubSettings1) 
    #etc 

我不怕有很多模型(我已經有)但我不想要不必要的。與模式表等。 我會很高興從exprienced Django開發人員的想法。

謝謝!

回答

1

如果這些設置是不透明的(例如,您不需要根據您的字典中的特定值進行過濾),您可以使用諸如django-picklefield之類的東西將它們存儲爲常規Python對象。

>>> from picklefield.fields import PickledObjectField 
... class SomeObject(models.Model): 
...  args = PickledObjectField() 
>>> obj = SomeObject() 
>>> obj.args = ['fancy', {'objects': 'inside'}] 
>>> obj.save() 
+0

很高興瞭解picklefields。但我恐怕我需要在我的模型方法等內的子集中引用值。 – alonisser

+0

@alonisser:要清楚,如果您只需要*引用*給定對象中的設置,那麼pickle字段工作得很好。你可以說'myobject.subsettings1 ['setting']'。如果您需要對這些設置執行數據庫操作(例如,使用「過濾器」),則無法將它們放入數據庫字段,並創建表來組織它們。使用[通用關係](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations)概括模型可能是可能的,但如果不知道更多細節,很難說。 –