首页 > 解决方案 > Django ArrayField 没有正确存储数据

问题描述

我今天偶然发现了一个奇怪的问题,我无法在 django 中正确地将项目添加到 ArrayField() 中。该文档很简单:https ://docs.djangoproject.com/en/3.1/ref/contrib/postgres/fields/#arrayfield

这是我的模型:

class AppealStateChangeLog(models.Model):

agent = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='appeal_change_log_appeal_id',
    )
codes = ArrayField(
        models.CharField(max_length=10, blank=True),
        default=list
    )

我无法添加这样的代码

# some where in code
codes = ['11111','22222','33333']
c= AppealStateChangeLog(
       agent=appeal.agent,
       codes=[str(a) for a in codes] if codes else []
      )
c.save()

此代码仅添加['11111']在代码字段中,我期待所有三个值。

奇怪的是,当我尝试更新它成功更新的值时:

item = AppealStateChangeLog.objects.get(id=123)
codes = ['11111','22222','33333']
item.codes = codes
item.save()

这将存储所有三个值。

我什至尝试使用 AppealStateChangeLog.objects.create() 方法创建,但它只添加数组的第一个值,即 ['11111']。

Postgres 版本:12 django 版本:1.10(我知道这是一个旧系统 :))

标签: djangopostgresql

解决方案


推荐阅读