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