使用Django 1.11.6和Postgres 9.2
如果我有以下型号:
class RoughDraft(models.Model)
class Manuscript(models.Model):
rough_draft = models.ForeignKey(RoughDraft)
class AudioBook(models.Model):
manuscript = models.ForeignKey(Manuscript)
class Series(models.Model):
class Book(models.Model):
manuscript = models.ForeignKey(Manuscript)
series = models.ForeignKey(Series)
我想在我的项目中添加一个Notes模型,以允许多个用户为RoughDrafts,Manuscripts,Books和AudioBooks添加注释。此外,当RoughDraft成为手稿或手稿成为书籍或AudioBook时,我希望将笔记继续下去。
创建这样的笔记模型是否更好:
class Notes(models.Model):
text = models.TextField()
并为RoughDraft,Manuscript,Book,Series和AudioBook中的每一个添加notes = models.ManyToMany(Notes)
字段
或
class Notes(models.Model):
text = models.TextField()
rough_draft = models.ForeignKey(RoughDraft, null=True, blank=True)
manuscript = models.ForeignKey(Manuscript, null=True, blank=True)
series = models.ForeignKey(Series, null=True, blank=True)
book = models.ForeignKey(Book, null=True, blank=True)
audio_book = models.ForeignKey(AudioBook, null=True, blank=True)
或者我应该创建ManuscriptNotes
模型,RoughDraftNotes
模型等......
答案 0 :(得分:0)
您可以在Django中使用"generic key"。
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Note(models.Model):
content = models.TextField()
author = models.ForeignKey(User, ...)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
这允许您将Note
对象与数据库中的任何其他对象相关联