我想知道是否可以在Django的属性实例中存储元组吗?
类似的东西:
class MyModel(models.Model):
my_tuple_field = TupleField()
,然后按如下所示创建MyModel的实例:
an_instance = MyModel.objects.create(my_tuple_field=('foo', 'bar'))
谢谢
答案 0 :(得分:0)
如果使用的是PostgreSQL,则可以使用JSONField,或者可以非常轻松地将列表或元组编码为JSON列表并将其存储在CharField中:
obj.foo_list = json.dumps( (2,3,4)) # "[2, 3, 4]"
obj.save()
obj = Foo.objects.get( ...)
foo_tuple = tuple( json.loads( obj.foo_list))
您可以将此行为封装在模型属性中(使用getter和setter),也可以将其内置以创建和保存模型实例。
JSONField与包含JSON的CharField之间的主要区别在于,可以在多大程度上根据字段的内容过滤查询集。 PostgreSQL JSONfield允许更高的精度。
答案 1 :(得分:0)
正如@p14z 所暗示的那样,拯救我的tuple
的最佳方式是ArrayField
。对于我的示例,我只想使用以下格式保存多边形范围:
(3.7739613717694787, 50.31527681737183, 4.726162032377, 50.49743217278623)
from django.contrib.postgres.fields import ArrayField
my_tuple_field = ArrayField(models.FloatField(), size=4, null=True)