评论Django中所有其他应用的应用

时间:2014-03-02 09:00:45

标签: django django-models django-contenttypes

我有一个论坛的应用程序。它有三个类标记问题答案

模型:

class Tag(models.Model):
    tag_name = models.CharField(max_length=100)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=True, auto_now=False)
    description = models.TextField()

    def __unicode__(self):
        return smart_unicode(self.tag_name)

class Question(models.Model):
    short_description = models.CharField(max_length=250)
    description = models.TextField()
    asked_by = models.ForeignKey(User)
    tags = models.ManyToManyField(Tag)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __unicode__(self):
        return smart_unicode(self.short_description)

class Answer(models.Model):
    description = models.TextField()
    for_question = models.ForeignKey(Question)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __unicode__(self):
        return smart_unicode(self.description)

我还想对问题答案以及我的应用的其他部分发表评论。实现这一目标的最佳方法是什么?我的意思是,为这个用例设计django模型的正确方法是什么?我是否必须使用内容类型

1 个答案:

答案 0 :(得分:1)

您是否考虑过在models.py中添加一个ForeignKey类注释?

该模型非常简单:

class Comment(models.Model):
     *attached_to* = models.ForeignKey(CONTENT)
     body = models.TextField()
     parent = models.ForeignKey('self', related_name="children")

other fields...

您是否对每种类型的内容使用相同的评论,或者您是否希望每种类型的内容都有独特的行为?

对于一个应用程序,上述模型是最简单的。

对于多个应用,您最好 - 我认为 - 将评论分解为一个独立应用,该应用调用ForeignKey中的相应应用(Foreign key from one app into another in Django

如果您正在寻找通用评论系统,上述模型将有效,但您可能希望查看GenericForeignKey(Django Model field with multiple types?)。