Django在数据库中制作对象的修改副本的最简洁方法是什么

eas*_*825 2 python django

假设ArticleVersion我的项目中有一个模型,定义为:

class ArticleVersion(models.Model):  

    article = models.ForeignKey(Article)
    version = models.PositiveIntegerField()
    content = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    media_type = models.ForeignKey(MediaType)
    author = models.ForeignKey(User, null=True)
Run Code Online (Sandbox Code Playgroud)

当用户填写此模型的表单时,我会检查表单中的版本内容是否不同,如果是,我会创建新版本.实际上现在它看起来像这样

   if self.old_content != updated_version.content:
        # create new version if content is different
        updated_version = self.article.articleversion_set.create(
            article=self.article,
            version=self.article.latest_version.version + 1,
            content=updated_version.content,
            media_type=updated_version.media_type,
            author=updated_version.author
        )
Run Code Online (Sandbox Code Playgroud)

但是如果我在模型中添加更多字段,那就太冗长了.我想知道有没有办法更简洁地在Django中做这些事情?

Dan*_*man 6

您可以设置article.pkNone,并在保存新条目时创建.