为了改进我的代码和数据库,我需要更改模型中的字段名称,使其远离令人困惑且接近保留字的值。
原始模型实际上是这样的:
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' ...
答案 0 :(得分:9)
好的,发现了错误。类模型定义还包含代码:
def __str__(self):
return self.my_old_name
将其更改为:
def __str__(self):
return self.my_new_name
解决了这个问题。我错过了这段代码告诉管理员要显示的内容。 (该模型比我发布的片段更复杂,包含了几十行。)