将未知对象类型保存到 Django 中的数据库中

Saving an unknown object type into database in Django

我有以下型号:

class Parameter(models.Model):
    par_type = = models.CharField(max_length=30)
    value = models.TextField()

大多数时候 value 字段将存储一个数字 (value=3.2118)。但有时我想分配其他对象 ID 的列表(如 value="[32, 22, 45]")或字符串对象(如 value="pass")等。我将在如下函数中使用 value 字段基于 par_type 的值:

def foo(par): # par is a Parameter object.
    return float(par.value) / 2

def bar(par):
    # Some code to convert a par to a list of objects
    object_list = get_objects(par) 
    # Return a random object from list
    return random.choice(object_list)

我不想为每一种可能的对象类型都写一段代码。理想情况下,到处都可以使用一个 decompose() 函数。我想将对象保存为 pickleJSON 类型(从 here 看到的)。但我不知道该怎么做。我正在使用 MySQL db.

你可以这样尝试 BinaryField:

import pickle

class Parameter(models.Model):
    _value = models.BinaryField()

    def set_data(self, data):
        self._value = pickle.dumps(data)

    def get_data(self):
        return pickle.loads(self._value)

    value = property(get_data, set_data)

用法:

In: b = Foo.objects.create(value=1)

In: b.value
Out: 1

In: b = Foo.objects.create(value={1:1,2:2})

In: b.value
Out: {1: 1, 2: 2}

In: b = Foo.objects.create(value=[1,1])

In: b.value
Out: [1, 1]

仅供参考,您不能存储 pass 因为它不是 Python 对象,而是语法的一部分。考虑使用 None 而不是 pass。