2014-02-15 27 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)概括模型可能是可能的,但如果不知道更多细节,很难说。 –