如何在管理员的管理员中保存管理员用户?

时间:2018-12-13 00:27:51

标签: wagtail

我在wagtail应用程序中有一个非页面模型,我想为其创建历史记录,例如my_objectmy_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的引用,所以我需要把它放在某个地方。

有人能指出我正确的方向吗?

2 个答案:

答案 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)