簡體   English   中英

Django 在數據庫中更改錯誤的列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM