【问题标题】:django admin reises FieldDoesNotExist on renamed fielddjango 管理员在重命名的字段上重新设置 FieldDoesNotExist
【发布时间】:2017-05-12 18:33:35
【问题描述】:

抱歉新手问题,但我不明白为什么会发生这种情况以及如何解决它。 我创建了评论模型

class Migration(migrations.Migration):

dependencies = [
    ('myblog', '0001_initial'),
]

operations = [
    migrations.CreateModel(
        name='Comment',
        fields=[
            ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ('text', models.TextField()),
            ('pub_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date published')),
            ('lft', models.PositiveIntegerField(db_index=True, editable=False)),
            ('rght', models.PositiveIntegerField(db_index=True, editable=False)),
            ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)),
            ('level', models.PositiveIntegerField(db_index=True, editable=False)),
            ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='myblog.Comment')),
        ],
        options={
            'abstract': False,
        },
    ),
]

在那之后我意识到我忘记了对文章的 FK。

class Comment(MPTTModel):
    text = models.TextField()
    parent_article = models.ForeignKey(Article, on_delete=models.CASCADE)
    parent_comment = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
    pub_date = models.DateTimeField('date published', default=timezone.now)

    class MPTTMeta:
        order_insertion_by = ['pub_date']


class Migration(migrations.Migration):

dependencies = [
    ('myblog', '0002_comment'),
]

operations = [
    migrations.RenameField(
        model_name='comment',
        old_name='parent',
        new_name='parent_comment',
    ),
    migrations.AddField(
        model_name='comment',
        name='parent_article',
        field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='myblog.Article'),
        preserve_default=False,
    ),
]

现在我无法在管理站点添加评论,因为它重新出现

 FieldDoesNotExist at /admin/myblog/comment/add/
 Comment has no field named 'parent'

我该如何解决?我必须删除评论模型并从头开始吗?

我知道我重命名了 FK,但 django 没有。管理员如何获取字段列表?来自迁移,而不是来自模型?

谢谢。

【问题讨论】:

标签: django django-models django-admin django-migrations


【解决方案1】:

这是因为在添加外键时,您也将其重命名了!

migrations.RenameField(
    model_name='comment',
    old_name='parent',
    new_name='parent_comment',
),

现在该字段称为parent_comment,要么回滚迁移,要么使用新的字段名称。也可以将 parent_comment 重命名为 parent!

【讨论】:

  • 我知道我重命名了 FK,但 django 没有。
  • 管理员如何获取字段列表?来自迁移,而不是来自模型?
  • Django 管理员不查看迁移。正如我在回答中提到的,您不小心重命名了该字段。再次重命名它,然后执行 makemigrations 然后迁移,一切都会恢复正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 2014-09-28
  • 2015-12-14
  • 1970-01-01
  • 2012-09-29
  • 2011-09-15
相关资源
最近更新 更多