Django管理员给出错误"'模型'对象没有属性' field_name'"字段名称更改后

时间:2016-06-05 22:19:14

标签: django django-admin

为了改进我的代码和数据库,我需要更改模型中的字段名称,使其远离令人困惑且接近保留字的值。

原始模型实际上是这样的:

class Company(models.Model):
    my_old_name = models.CharField(max_length=100, db_index=True)

新模型实际上是这样的:

class Company(models.Model):
    my_new_name = models.CharField(max_length=100, db_index=True)

我跑了:

python manage.py makemigrations my_app

并且迁移代码是这样的:

class Migration(migrations.Migration):

    dependencies = [
        ('my_app', '0004_auto_20160605_1852'),
    ]

    operations = [
        migrations.RenameField(
            model_name='company',
            old_name='my_old_name',
            new_name='my_new_name',
        ),
    ]

然后我执行了:

python manage.py migrate

网站运行正常。所有页面都显示并使用' new_name'如预期的。但是,我无法使用管理站点来管理数据库。它抛出错误:

Error during template rendering

In template /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/s...  error at line 91

'Company' object has no attribute 'my_old_name'

我已经有一段时间没有运气了。任何帮助将不胜感激。

作为第一个建议的补充,这是admin.py的内容:

from django.contrib import admin
from .models import Company, Parameters

admin.site.register(Company)
admin.site.register(Parameters)

它不包含' my_old_name' ...

1 个答案:

答案 0 :(得分:9)

好的,发现了错误。类模型定义还包含代码:

def __str__(self):
    return self.my_old_name

将其更改为:

def __str__(self):
    return self.my_new_name

解决了这个问题。我错过了这段代码告诉管理员要显示的内容。 (该模型比我发布的片段更复杂,包含了几十行。)