有没有一种方法可以在Django的属性实例中存储元组?

时间:2020-01-22 15:07:16

标签: python django django-models tuples

我想知道是否可以在Django的属性实例中存储元组吗?

类似的东西:

class MyModel(models.Model):

    my_tuple_field = TupleField()

,然后按如下所示创建MyModel的实例:

an_instance = MyModel.objects.create(my_tuple_field=('foo', 'bar'))

谢谢

2 个答案:

答案 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)
相关问题