我在wagtail应用程序中有一个非页面模型,我想为其创建历史记录,例如my_object
和my_object_history
,可在其中创建,编辑或删除文件使用创建的管理员用户,时间等来创建新的my_object_history
模型。
class MyObjectHistory(models.Model):
created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, editable=False,null=True,blank=True)
save_date = models.DateTimeField(auto_now=True)
my_object = models.ForeignKey(MyObject, on_delete=models.CASCADE)
notes = models.TextField(blank=True, null=True)
然后在某个地方,理想情况下,在save...
事件上,我将实例化此对象并将其保存。
我不清楚我可以在哪里覆盖wagtail管理员并让请求用户进行分配和保存。
django ModelAdmin
有一个save_model,但似乎w没有类似的东西。
我开始覆盖EditView
/ CreateView
path,但是看来EditView实际上没有save
方法。
模型本身有一个save
方法,我可以使用,但是没有对request.user
的引用,所以我需要把它放在某个地方。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
这确实不是问题,关键是使用Django的标准form_valid
方法:
class MyObjectEditView(EditView):
def form_valid(self, form, *args, **kwargs):
history = MyObjectHistory.objects.create(created_by=self.request.user, item=self.instance)
history.save()
return super().form_valid(form, *args, **kwargs)
答案 1 :(得分:0)
这是我在查看wagtail ModelAdmin(WagtailRegisterable)中的edit_view函数之后解决问题的方法:
class MymodelAdmin(ModelAdmin):
def edit_view(self, request, instance_pk):
kwargs = {'model_admin': self, 'instance_pk': instance_pk}
view_class = self.edit_view_class
if request.method == "POST":
mymodel = myModel.objects.get(pk=instance_pk)