我正在为一个项目编写一个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只是继承了内容,它有一个原始内容的ForeignKey。
我的问题是如何保存我的ChangeSet?
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
看起来像'changeset.topic = new_content.topic'并不是什么大不了的事,但是我缩短了我的真实内容模型,所以你们不必阅读与解决这个问题无关的所有内容问题
更多地概括这个问题。 保存变更集的最佳方法是什么? 像我一样为变更集创建一个新模型,或者我应该添加一个带有对自己的引用的ForeignKey到我的内容模型?
答案 0 :(得分:1)
您对模型编码的方式,我认为它不会像您期望的那样工作。在这种情况下,ChangeSet继承自Content。 Django实现这一点的方法是创建一个连接ChangeSet和Content的OneToOneField。这意味着您的应用程序有两件事:
我见过的最好的方法(由django-reversion使用)可能是获取内容,序列化它,然后将内容ID和内容类型保存到模型中。您可以像ChangeSet.original一样访问它。{tp / topic / etc.}。
在这里查看它的型号代码:models.py。与ChangeSet等效的是Version模型。