在我的博客中,我决定允许用户编辑帖子(我正在使用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)

最佳答案

您需要的是版本控制。有可以实现它的应用程序。但是,如果您想自己做,则您的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)

关于python - 如何允许用户使用Django编辑帖子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18744525/

10-16 22:09