python - Django 将模型实例传递给略有不同的模型

标签 python django

我正在为一个项目编写一个 Django 应用程序,每个人都可以更改文章,但用户提交的更改必须在上线之前由某人查看。所以你看它有点像维基百科使用的系统。

class Content(models.Model):
    tp = models.DateTimeField(auto_now_add=True)
    topic = models.CharField(max_length=60)
    content = models.TextField()
    slug = models.SlugField(max_length=80)

class ChangeSet(Content):
    content = models.ForeignKey('Content')

这些是我的模型。 ChangeSet只是继承了Content,并且它有一个指向原始内容的ForeignKey。

我的问题是如何保存我的变更集?

def content(request, content_slug):
    content = get_object_or_404(Content, slug=content_slug)
    if request.method == 'POST':
        new_content = ContentModelForm(request.POST, instance=content)

        new_content = new_content.save(commit=False)

        changeset = ChangeSet(content=content)

我可以通过某种方式将 ChangeSet 传递给内容实例吗? Django 是否认识到这两个模型除了 fk 之外是相同的? 或者我是否必须手动添加每个字段,例如:

changeset.topic = new_content.topic

编辑#1

看起来只写“changeset.topic = new_content.topic”没什么大不了的,但我缩短了我的真实内容模型,这样你们就不必阅读与解决此问题无关的所有内容问题。

编辑#2

更概括地回答这个问题。 保存变更集的最佳方法是什么? 像我一样为变更集创建一个新模型,或者我应该只是将一个引用其自身的外键添加到我的内容模型中?

最佳答案

您的模型编码方式,我认为它不会像您期望的那样工作。在本例中,ChangeSet 继承自 Content。 Django 实现这一点的方式是创建一个连接 ChangeSet 和 Content 的 OneToOneField。这对您的应用程序意味着两件事:

  1. 拥有外键是没有意义的,因为这就像为自己拥有一个 FK(无论如何,幕后已经有一个 OneToOne)
  2. ChangeSet 始终指向 Content 的最新实例。此模型设置中没有任何内容可以保存更改的副本。

可能我见过的实现此目的的最佳方法(由 django-reversion 使用)是获取内容,将其序列化,然后将内容 Id 和内容类型保存到模型中。您可以像 ChangeSet.original.{tp/topic/etc.} 一样访问它。

在这里查看它的型号代码:models.py 。版本模型相当于您的 ChangeSet。

关于python - Django 将模型实例传递给略有不同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1782815/

相关文章:

python - 通过Python脚本执行交互式SSH命令

django - 重命名 auth_user 会中断新设置的迁移

python - 检查 python 日期列表中的任何日期是否在两个日期列之间

python - 打印按行排序的 zip 中文件的注释,Python

python - 预热服务如何在 python google app engine 中工作?

python - 不知道发布搜索按钮的 btnSearch.x 和 btnSearch.y 值

django - aadsts50011 : the reply url specified in the request does not match the reply urls configured for the application: 'App id' . 本地主机配置

python - django-autocomplete-light:如何缓存选择?

python - 用于基于函数的 View 的 Django Rest Framework

python - Django shell 脚本定义错误