在我的项目中,我目前有两种不同的帖子类型(但将来可能会更多):帖子和评论。两者都可以被评论,因此他们可以共享相同的评论模型。
问题是:如果我为Post和Review创建两个不同的应用程序(最终是其他帖子类型),我应该与GenericForeignKey共享相同的Comment模型,还是应该在每个应用程序中重新创建具有特定ForeignKey的相同Comment模型?或者我可能只是将每个帖子类型放在一个独特的常见应用程序中?
答案 0 :(得分:1)
我会通过以下方式之一进行设置。
简易解决方案:在需要时使用
目录(app)结构:
post
models.py
review
models.py
common
models.py
在common/models.py
中,您可以定义评论:
class Comment(models.Model):
title = models.CharField(max_length=128, blank=True, default='')
...
在post/models.py
中,您可以在需要时引用此类:
from common.models import Comment
class Post(models.Model):
comment = models.ForeignKey(Comment, related_name='comments')
...
通用解决方案:mixins
另一种选择是在您的常见应用中创建 mixin行为。
class Commentable(models.Model):
comment = models.ForeignKey(Comment, related_name='comments')
通过继承它来混合这种行为。
from common.models import Commentable
class Post(Commentable, models.Model):
...
在使用它们之前,你应该先阅读一些关于mixins的内容。
答案 1 :(得分:0)
作为另一种选择,您可以检查django-polymorphic。 https://django-polymorphic.readthedocs.io/en/stable/