Django:不同Post类型的相同评论模型

时间:2016-08-07 11:41:06

标签: python django

在我的项目中,我目前有两种不同的帖子类型(但将来可能会更多):帖子评论。两者都可以被评论,因此他们可以共享相同的评论模型。

问题是:如果我为Post和Review创建两个不同的应用程序(最终是其他帖子类型),我应该与GenericForeignKey共享相同的Comment模型,还是应该在每个应用程序中重新创建具有特定ForeignKey的相同Comment模型?或者我可能只是将每个帖子类型放在一个独特的常见应用程序中?

2 个答案:

答案 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/