如何在Django的数据库中存储复杂数据字段的python对象?

时间:2014-11-20 09:01:31

标签: python django serialization

我有一个带有comlex数据结构的python类。它具有嵌套的对象和普通数据的列表和单词。

class NK_Automata(object):
    def __init__(self,p_N=5,p_K=5,p_functionsList=None,p_linksList=None):
        self.N=p_N
        self.K=p_K

        if p_functionsList==None:
            p_functionsList=[]
        else:
            self.functionsList= p_functionsList   #list of BinFunction objects

        if p_linksList==None:
            self.linksList=[]
        else:
            self.linksList=p_linksList            #list of lists of integers

        self.ordinalNumber=-1


        self.stateSpan={}                     #stateSpan: {currentStateNumber: nextStateNumber,...}
        self.stateList=[]                     #list of integers
        self.attractorDict={}                 #attractorDict: {attractorNumber:[size,basinSize],...}

        self.attractorStatesDict ={}          #attractorStatesDict: {attractorStateNumber:[nextAttractorStateNumber,attractorStateWeight],...}

我应该如何将其存储在数据库(sqlite3)中?如何为这个对象制作Django模型?我应该序列化对象吗?

更新修正了建议的默认参数

1 个答案:

答案 0 :(得分:2)

您可能需要查看django-picklefield

django-picklefield提供了一个pickle对象字段的实现。这些字段可以包含任何可选对象。

基本上,这将采用任何Python对象,保存它的pickle表示,并且在将pickle表示从数据库中拉出后,您可以将其重新创建为相同的对象。

您可能想要创建一个模型对象NK_Automata,它将每个属性存储在picklefield中,然后创建一个方法来重新创建具有所有属性的实际类对象。我无法向你保证全班可以选择,但是可以将整个NK_Automata类实例存储在一个字段中。