1

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

1 回答 1

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)
于 2013-09-11T15:10:11.270 回答