У меня две модели, Article
и ArticlePost
. ArticlePost
ссылается на 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 manage 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 manage migrate, я получаю:
django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table "article"
Что странно, так это то, что у меня есть другая модель в app1
, которая также ссылается на статью с внешним ключом, который отлично работает. Однако в этом случае может показаться, что Django не знает, какое поле является первичным ключом для Article
. Единственное отличие состоит в том, что ArticlePost
находится в другом приложении, чем Article
. У меня Джанго 1.10. Кто-нибудь знает, что вызывает это и как это можно исправить?
В качестве альтернативы, если это просто ключевая проблема, возможно, решение состоит в том, чтобы удалить primary_key
в статье и вместо этого использовать стандартное значение Django id
. В этом случае, как лучше всего это сделать, сохраняя ссылки внешнего ключа из других моделей на статью в приложении1?
null=False
в поле модели. По умолчаниюnull=False
. Вам нужно добавить значениеnull
только в том случае, если вы устанавливаете его наTrue
. - person jape   schedule 04.08.2016