【问题标题】:Column does not exist foreign key table in DjangoDjango中的列不存在外键表
【发布时间】:2021-06-01 12:47:39
【问题描述】:

在 django 中,我在我的应用程序中创建了一个新模型(应用程序名称为 quiz),如下所示:

class Score(models.Model):
    person1 = models.ForeignKey(Personality, on_delete=models.CASCADE, related_name="person1", blank=True, null=True, default=0)
    person2 = models.ForeignKey(Personality, on_delete=models.CASCADE, related_name="person2", blank=True, null=True, default=0)
    score = models.DecimalField(default=0, max_digits=5, decimal_places=2) 

然后我开始进行 makemigrations 和 migrate,这是成功的。
我还向管理员注册了这个模型。但是每当我尝试在管理站点上打开它的页面时,我都会收到以下消息:

附:我使用 PostgreSQL 作为我的后端

编辑:在此处添加迁移的输出:

# Generated by Django 3.1.7 on 2021-06-01 13:40

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Personality',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('social', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('clean', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('organ', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('finance', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('opinion', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('people', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('cook', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('pet', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('night', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('spont', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('space', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('work', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('ambition', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('transport', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('chores', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('help', models.DecimalField(decimal_places=1, default=0, max_digits=5)),
                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Score',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('score', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
                ('person1', models.ForeignKey(blank=True, default=0, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='person1', to='quiz.personality')),
                ('person2', models.ForeignKey(blank=True, default=0, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='person2', to='quiz.personality')),
            ],
        ),
    ]

【问题讨论】:

  • 您能否向我们提供 makemigrations 和 migrate 命令的输出?
  • @MarcCompte 将迁移的输出添加到问题中
  • 嗯,我很感兴趣,它看起来确实不错。在运行 migrate 命令时,您确实看到它正在执行此迁移,对吗?您在设置中只使用一个 DATABASE,还是有多个?
  • 是的,仅此迁移。不,我没有使用其他数据库。

标签: django postgresql django-models


【解决方案1】:

问题在于 postgreSQL 本身。通过以下步骤解决了该问题:

  1. 从 PostgreSQL 中删除了分数和个性表。
  2. 从 PostgreSQL 中的 django_migrations 表中清除了用于“测验”应用程序的行。
  3. 从 django 中的测验应用程序中清除迁移(保留 init 文件)
  4. 再次运行 makemigration 和 migrate 命令

【讨论】:

    猜你喜欢
    • 2013-07-09
    • 2015-05-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2018-08-05
    • 2020-09-23
    • 2012-09-20
    • 2011-01-29
    相关资源
    最近更新 更多