Django外键无法识别关系中的主键



我有两个型号,ArticleArticlePostArticlePost引用Article作为外键,并且在Article:的单独应用程序中

====app1/models.py:======
class Article(models.Model):
     name = models.CharField(max_length=200, primary_key=True)
====app2/models.py======
class ArticlePost(models.Model):
    article = models.ForeignKey(Article, null=False, db_index=True)
    created_at = models.DateTimeField(auto_now_add=True)
    comment = models.TextField(blank=True)

我已经运行了python管理makemigrations,它提供了以下内容:

operations = [
migrations.CreateModel(
    name='ArticlePost',
    fields=[
        ('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)),
        ('created_at', models.DateTimeField(auto_now_add=True)),
        ('comment', models.TextField(blank=True)),
        ('article', models.ForeignKey(to='app2.Article')),
    ],
),
]

然而,当我运行python管理迁移时,我得到:

django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table "article"

奇怪的是,我在app1中有另一个模型,它也引用了一篇带有外键的文章,效果很好。然而,在这种情况下,Django似乎不知道哪个字段是Article的主键。唯一的区别是ArticlePostArticle在不同的应用程序中。我正在运行Django 1.10。有人知道是什么导致了这种情况,以及如何解决吗?

或者,如果这只是一个关键问题,也许解决方案是删除Article上的primary_key,转而使用Django默认的id。在这种情况下,如何最好地做到这一点,同时在app1中维护从其他模型到文章的外键引用?

好的,所以你尝试做的是绝对正确的。但问题出在Django身上。

当您将name设置为primary_key时,请根据官方文档->https://docs.djangoproject.com/ja/1.9/ref/models/fields/#django.db.models.Field.unique

primary_key=True意味着null=False和unique=True。

因此,从技术上讲,你的Article模型中确实有一个独特的字段,但在阅读了Stackoverflow上的其他帖子后,

请将此作为参考(也可以查看注释)->django 中的主键和唯一键

CCD_ 15似乎存在一些问题。django似乎只将其视为一个主键,而不认为它是unique

因此,当您将primary_key=true用于name时,Django不会为对象创建它拥有唯一的自动递增id。因此,现在您在模型Article中没有任何对象的唯一id,因此您会得到所得到的错误。

因此,只需删除primary_key=true,让Django使用自己的自动递增的唯一id,就不会出现这个错误。

@mohevi,检查您是否使用MongoDb作为数据库,因为MongoDb不支持外键功能。这些通常在RDBMS中得到支持,如postgresql、MySQL等

相关内容

  • 没有找到相关文章

最新更新