Django在DB

时间:2019-03-08 09:01:47

标签: python django database postgresql

在我的数据库(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'

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

1 个答案:

答案 0 :(得分:3)

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

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

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