[英]best solution for Django Composite primary-key from foreign-keys
我想在 Django SQLite DB( ER 图)中满足这种关系,我尝试过使用我所建议的unique_together
和models.UniqueConstraint
解决方案。
myapp/models.py
class User(models.Model):
user_id = models.AutoField(primary_key=True, null=False)
class Article(models.Model):
article_id = models.AutoField(primary_key=True)
class ArticleEditor(models.Model):
class Meta:
# RECOMMENDED
models.UniqueConstraint(fields=['article_id', 'editor_id'], name="article_editor_id",)
# DEPRECATED
unique_together = (('article_id', 'editor_id'),)
article_id = models.ForeignKey(
Article,
on_delete=models.CASCADE,
)
editor_id = models.ForeignKey(
User,
on_delete=models.PROTECT,
)
在这两种情况下,当我尝试通过 python 控制台保存 ArticleEdiotor object 时,都会收到以下错误:
>>> from myapp.models import User, Article, ArticleEditor
>>> a = Article.objects.get(article_id=2)
>>> u = User.objects.get(user_id=1)
>>> ae = ArticleEditor(a.article_id, u.user_id)
>>> ae.save()
Traceback (most recent call last):
...
django.db.utils.OperationalError: no such table: myapp_articleeditor
但是,我检查了迁移的sqlmigrate
命令,它确实CREATE TABLE "myapp_articleeditor"
; 但它仍然使我不想要一个"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT
,因为我希望我的复合键( article_editor_id
)成为主键。 我该如何做到这一点?
这实际上是建立具有中间表的多对多关系的最佳方法,如图所示,还是有更好的解决方案?
Django 不支持多列主键,建议使用唯一的解决方法,但您仍将有一列用作真实 ID
长时间Wiki 文章django-compositepks没有关于此主题的工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.