Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ForeignKey到泛型Python数据类型?_Python_Django_Foreign Keys_Models - Fatal编程技术网

Django ForeignKey到泛型Python数据类型?

Django ForeignKey到泛型Python数据类型?,python,django,foreign-keys,models,Python,Django,Foreign Keys,Models,我试图创建一个django模型,其中一个字段引用某种python类型,可以是整数、字符串、日期或十进制 class MyTag(models.Model): name = models.CharField(max_length=50) object = (what goes here??) 我知道,如果我想要任何其他模型的外键,我可以使用GenericForeignKeys和content\u类型。我如何拥有引用任何python类型的模型字段?到目前为止,我唯一想到的是创建对象

我试图创建一个django模型,其中一个字段引用某种python类型,可以是整数、字符串、日期或十进制

class MyTag(models.Model):
    name = models.CharField(max_length=50)
    object = (what goes here??)
我知道,如果我想要任何其他模型的外键,我可以使用GenericForeignKeys和content\u类型。我如何拥有引用任何python类型的模型字段?到目前为止,我唯一想到的是创建对象上简单包装的模型,并使用GenericForeignKeys


有什么方法可以做到这一点吗?

可以,但它不能按原样处理
十进制。

因为您想要过滤,所以您的字段需要某种DB支持,而json字段对您来说没有那么大的价值。您可以使用不同的解决方案来解决不同的问题 并发症程度根据您的实际需要而定。一个建议是将数据序列化为字符串。为字符串/整数/浮点排序填充足够的零。现在,您可以将所有内容作为字符串进行筛选(确保您也填充了筛选依据的值)。添加数据类型列以获取正确的python对象

TYPES = [(int, 1), (Decimal, 2),(date, 3), (str, 4)]
class MyTag(models.Model):
    name = models.CharField(max_length=50)
    data_type = models.IntegetField(choices=TYPES)
    value = models.CharField(max_length=100)

    def set_the_value(self, value):
        choices = dict(TYPES)
        self.data_type = choices[type(value)]
        if self.data_type == int:
            self.value = "%010d" % value
        # else... repeat for other data types

    def get_the_value(self):
        choices = dict([(y,x) for x,y in TYPES])
        return choices[self.data_type](self.value)

(免责声明:这是一次黑客攻击,但可能不是最糟糕的一次)。

如果您不需要筛选此字段,您可以使用,也可以像

第二种方法允许您存储几乎任何类型的python数据类型,尽管它只能从python代码中使用


如果您需要筛选此数据,您只需使用一种数据类型创建单独的字段。

似乎无法使用此模型轻松筛选。例如,如果我想获得某个带有某个
名称
对象<值
的标记,您能用JSONField实现吗?我主要存储简单的类型,没有字典。不是直接的,但是对于一个可以存储各种类型的字段,没有合理的方法来定义相对不等式。我最终做了类似的事情。似乎大多数方法都很粗糙,所以我只为我的每种类型(int、date、str)存储一个字段,该字段可能为空,并存储我正在使用的枚举标记。