Django ForeignKey到泛型Python数据类型?
我试图创建一个django模型,其中一个字段引用某种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类型的模型字段?到目前为止,我唯一想到的是创建对象
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)存储一个字段,该字段可能为空,并存储我正在使用的枚举标记。