如何让用户用Django编辑帖子?

时间:2013-09-11 14:51:35

标签: python django multi-table-inheritance

在我的博客中,我决定允许用户编辑帖子(我正在使用Django),但我不确定我的模型做什么是正确的实现。使用多表继承作为下面的代码是一个好主意吗?我还希望跟踪所有帖子,原件作为每个新编辑的内容。

class Post(models.Model):
    title = models.CharField(max_length=500)
    text = models.TextField()
    creation_date = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User)

    def __unicode__(self):
        return "%s %s by %s" % (self.title, self.creation_date, self.user)

class Edit(Post):
    edited_date = models.DateTimeField(auto_now_add=True)
    editor = models.OneToOneField(User)

    def __unicode__(self):
        return "%s edited by %s" % (self.convention, self.login)

1 个答案:

答案 0 :(得分:1)

您需要的是版本控制。有些应用程序可以实现它。但是,如果您想自己动手,那么您的Edit模型必须引用Post模型。并且必须指向与该编辑的作者相对应的特定帖子。这必然意味着每次保存帖子时都必须创建Post实例,并且必须从Edit实例中指向该新实例。

这样的事情,但可能需要更多的工作 -

class Post(models.Model):
    title = models.CharField(max_length=500)
    text = models.TextField()
    creation_date = models.DateTimeField(auto_now_add=True)
    edited_date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User)

    def __unicode__(self):
        return "%s at %s by %s" % (self.title, self.creation_date, self.author.first_name)

class Edit(models.Model):
    creation_date = models.DateTimeField(auto_now_add=True)
    editor = models.ForeignKey(User)
    post = models.ForeignKey(Post)

    def __unicode__(self):
        return "%s edited by %s" % (self.post.title, self.editor.first_name)