Django ArrayField附加,避免竞争条件

时间:2015-10-31 16:53:13

标签: python arrays django postgresql race-condition

我有一个ArrayField()的模型,并希望为其附加一个值。

我能做到:

self.my_array_field.append("foobar")

然而,由于竞争条件,这经常会失败。

所以我尝试过这样的事情:

self.my_array_field = F('my_array_field') + "foobar"

这样:

self.my_array_field = F('my_array_field').append("foobar")

和此:

self.my_array_field = Func(F('my_array_field'), Value("foobar"), function='array_append')

不幸的是,所有这些都彻底失败了。

你有什么建议我在django中实现这个PostGreSQL语句?

UPDATE my_model SET my_array_field = array_append(my_array_field, "foobar")

请注意,此声明也是等效的:

UPDATE my_model SET my_array_field = my_array_field || "foobar"

1 个答案:

答案 0 :(得分:1)

实际上,这个解决方案运行良好:

self.my_array_field = Func(F('my_array_field'), Value("foobar"), function='array_append')