【问题标题】:How can I save the admin user in wagtail's admin?如何将管理员用户保存在 wagtail 的管理员中?
【发布时间】:2018-12-13 00:27:50
【问题描述】:

我在 wagtail 应用程序中有一个非页面模型,我想为其创建历史记录,例如 my_objectmy_object_history,在管理员中创建、编辑或删除任何新的 @ 987654326@ 模型是使用创建的管理员用户、时间等创建的。

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,但看起来 wagtail 没有类似的东西。

我开始重写EditView/CreateViewpath,但似乎EditView实际上没有save方法。

模型本身有一个我可以使用的save 方法,但没有引用request.user,所以我需要在某个地方找到它。

谁能指出我正确的方向?

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    这真的不是 wagtail 问题,关键是使用 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)
    

    【讨论】:

    • 我不是 100% 的(而且很晚了),但是这个 EditView 真的会每次都创建一个新的 MyObjectHistory 对象而不是编辑 MyObjectHistory 的当前实例吗?如果是这样的话,貌似可以使用 get_object_or_404 或类似的方法来纠正这个问题?
    【解决方案2】:

    这就是我在查看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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多