Django изменить неверное имя столбца в БД - PullRequest
0 голосов
/ 08 марта 2019

в моей базе данных (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 Ответ

3 голосов
/ 08 марта 2019

Вы можете изменить модель для размещения в вашем пользовательском столбце с аргументом db_column следующим образом:

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

Для уточнения: параметр db_colum может использоваться с каждым полем django по умолчанию. Когда он используется, django игнорирует схему именования по умолчанию и просто ищет любое имя, которое вы передали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...