我正在尝试创建一个django模型,它的字段之一是对某种python类型的引用,它可以是整数,字符串,日期或小数。
class MyTag(models.Model):
name = models.CharField(max_length=50)
object = (what goes here??)
我知道如果我想要任何其他模型的外键,我可以使用GenericForeignKeys和content_types。我怎样才能有一个引用任何python类型的模型字段?到目前为止,我想出的唯一想法是创建对象的简单包装器模型并使用GenericForeignKeys。
有没有办法做到这一点?
答案 0 :(得分:2)
由于你想要过滤,你需要为你的字段提供某种数据库支持,而json字段对你来说不是那么有价值。您可以使用不同的解决方案 并发症水平根据您的实际需要。一个建议是将数据序列化为字符串。使用足够的零填充字符串/整数/浮点数排序。现在您可以将所有内容过滤为字符串(确保填充您要过滤的值)。添加data_type列以获取正确的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)
(免责声明:这是一个黑客,但可能不是最糟糕的一个。)
答案 1 :(得分:0)
JSONField
可行,但不会按原样处理Decimal
。
答案 2 :(得分:0)