【问题标题】:Django admin gives error "'Model' object has no attribute 'field_name'" after field name change字段名称更改后,Django 管理员给出错误“'Model' object has no attribute 'field_name'”
【发布时间】:2016-06-05 22:19:13
【问题描述】:

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

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

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”...

【问题讨论】:

  • 你修改了你的 admin.py 吗?如果是,你应该放在那个问题页面上。

标签: django django-admin


【解决方案1】:

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

def __str__(self):
    return self.my_old_name

改成:

def __str__(self):
    return self.my_new_name

解决了这个问题。我错过了这段代码,它告诉管理员要显示什么。 (该模型比我发布的 sn-ps 更复杂,并且包含另外几十行。)

【讨论】:

  • 这正是我在回答中所说的。
猜你喜欢
  • 2022-11-18
  • 2021-06-24
  • 2021-06-24
  • 2021-04-09
  • 1970-01-01
  • 2021-07-25
  • 2015-09-26
  • 2015-11-13
  • 2017-07-26
相关资源
最近更新 更多