[英]Django change wrong column name in DB
在我的數據庫 (psql) 中,我有一個名為offers_offer
的表,里面有一個名為offer_name
的列,這是錯誤的,因為它實際上應該只是name
。 我不知道為什么它有這個名字,但由於這個原因我無法加載任何裝置或創建一個新的 object,因為我總是收到找不到name
的錯誤(很明顯)。
現在我的 model 看起來像這樣:
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'
那么有人知道解決這個問題的好方法嗎?
您可以使用db_column
參數將模型更改為適合自定義列的模型,如下所示:
name = models.CharField(default="", verbose_name='Offer Name', blank=False, max_length=255, db_column="offer_name")
詳細說明: db_colum
參數可與每個默認django字段一起使用。 使用django時,它會忽略其默認命名方案,而只會查找您傳遞的名稱。
在我的例子中,發生這種情況是因為我最初將 RenameField 放在了之前的(尚未提交回購,但已經應用)遷移中,即使已經應用了該遷移,Django 似乎邏輯上解析了所有依賴項遷移並且決定重命名已經發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.