【问题标题】:Django change wrong column name in DBDjango 在数据库中更改错误的列名
【发布时间】:2019-03-08 09:01:46
【问题描述】:

在我的数据库 (psql) 中,我有一个名为 offers_offer 的表,其中有一个名为 offer_name 的列,这是错误的,因为它实际上应该只是 name。我不知道为什么它有这个名字,但由于这个原因,我无法加载任何固定装置或创建新对象,因为我总是收到 name 未找到的错误(显然)。

现在我的模型看起来像这样:

class Offer(models.Model):
   name = models.CharField(default="", verbose_name='Offer Name', blank=False, max_length=255)
   (some other fields...)

我唯一的初始迁移如下所示:

from __future__ import unicode_literals

from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('crm', '0007_make_gender_mandatory'),
    ]

    operations = [
        migrations.CreateModel(
            name='Offer',
            fields=[
                ('name', models.CharField(default='', max_length=255, verbose_name='Offer Name')),
                (every other field...)
                ],
            options={
                (some options...)
            },
        ),
    ]

所以我真的不知道为什么它在我的数据库中被命名为offer_name,而创建它是为了将name 作为字段名。

无论如何,我试图通过进行新的迁移来解决这个问题:

from __future__ import unicode_literals

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('offers', '0001_initial'),
    ]

    operations = [
        migrations.AlterField(
            model_name='offer',
            name='offer_name',
            field=models.CharField(default='', db_column=b'offer_name', max_length=255, verbose_name='Offer Name'),
        ),
        migrations.RenameField(
            model_name='offer',
            old_name='offer_name',
            new_name='name',
        ),
    ]

但如果我这样做了,我只会收到一个 FieldDoesNotExist 错误,告诉我django.core.exceptions.FieldDoesNotExist: Offer has no field named 'offer_name'

那么有人知道解决这个问题的好方法吗?

【问题讨论】:

    标签: python django database postgresql


    【解决方案1】:

    您可以使用 db_column 参数更改模型以适应您的自定义列,如下所示:

    name = models.CharField(default="", verbose_name='Offer Name', blank=False, max_length=255, db_column="offer_name")
    

    更详细一点:db_colum 参数可以与每个默认的 django 字段一起使用。当使用它时,django 会忽略它的默认命名方案,只是查找您传递的任何名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多