在我的数据库(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'
那么有人知道解决此问题的好方法吗?
答案 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时,它会忽略其默认命名方案,而只会查找您传递的名称。