【问题标题】:ArrayField In Django is giving error while doing migrationsDjango中的ArrayField在进行迁移时出错
【发布时间】:2019-12-15 03:34:57
【问题描述】:

我在我的应用程序中添加了 arrayfield 来建模。下面是我的模型

class employees(models.Model):
   firstName=models.CharField(max_length=10)
   lastName=models.CharField(max_length=10)
   tags_data = ArrayField(models.CharField(max_length=10, blank=True),size=8,default=list)

以下是我的迁移文件数据。

class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
    migrations.CreateModel(
        name='employees',
        fields=[
            ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ('firstName', models.CharField(max_length=10)),
            ('lastName', models.CharField(max_length=10)),
            ('tags_data', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=10), default=list, size=8)),
        ],
    ),
]

当我进行迁移时,我收到以下错误

django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[8] NOT NULL)' at line 1") 

语法有什么问题。请帮助我哪里出错了?

【问题讨论】:

  • 附带说明,您在firstNamelastName 中使用了尾随逗号,因此Django 不会将它们视为字段。

标签: mysql django django-models django-rest-framework django-mysql


【解决方案1】:

ArrayField 是 Postgres 特有的,是从 Postgres 库中导入的。 所有这些字段都可以从 django.contrib.postgres.fields 模块获得。

使用 Postgesql 确保您的 DATABASE 配置。 看起来您正在尝试将迁移提交到 MySql。您应该设置一个本地 Postgres 数据库,并从中更新您的 settings.py 文件。

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'DATABASE NAME',
    'USER': 'USER NAME',
    'PASSWORD': 'USER PASSWORD',
    'HOST': 'localhost',
    'PORT': '5432',
}
}

然后从你的 models.py 创建你的迁移

from django.db import models
from django.contrib.postgres.fields import ArrayField
# Create your models here.

class employees(models.Model):
   firstName=models.CharField(max_length=10)
   lastName=models.CharField(max_length=10)
   tags_data = ArrayField(models.CharField(max_length=10, blank=True),size=8,default=list)

【讨论】:

  • 感谢您的回复。有什么解决方案可以让我将 arrayfield 或 listfield 添加到我的模型中,以便将字符串数组存储到我的 mysql db 中。
  • 是的,你可以在 MySql 中使用 List Fields。示例 tags_data = ListCharField( base_field=CharField(max_length=10), size=6, max_length=(6 * 11) # 6 * 10 字符标称,加逗号 ) 请参阅此文档 django-mysql.readthedocs.io/en/latest/model_fields/…
  • 我试过这样ListCharField(base_field=models.CharField(max_length=2),size=204,max_length=(204 * 3))。当我看到表的结构时,它显示为 VARCHAR
  • p = Person.objects.create(name='Horatio', post_nominals=['PhD', 'Esq.']) p.post_nominals ['PhD', 'Esq.']跨度>
猜你喜欢
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2022-01-09
  • 2019-05-17
  • 1970-01-01
相关资源
最近更新 更多