【问题标题】:Django admin get updated model (and updated relative models that are inlines) when "Save" is clicked单击“保存”时,Django 管理员获取更新的模型(以及更新的内联相关模型)
【发布时间】:2022-10-24 14:50:24
【问题描述】:

我有一个名为User 的模型,它有一些字段,还有一些相关模型。

它在管理页面中注册,并且它的一些相关模型被注册为它的内联。

现在,我有一个函数,我们称之为update_api(user),它将用户作为参数(这是User 类的一个实例)并将其发送到API。注意这个函数也使用了User的相关模型。

当用户保存在管理页面中时,我想调用update_api,但我希望更新他的所有字段和相关内联模型。此外,我希望每次保存时只调用一次此函数。

我曾尝试覆盖 User.save()UserAdmin.save_model() 但这让我无处可去,因为那时相关字段尚未更新。

当用户通过视图保存时,我在执行request.user.refresh_from_db() 后最后手动调用此函数。

【问题讨论】:

  • 用户和这些其他领域之间的关系是什么? - 它是M2M吗?因为覆盖管理员的save_method() 通常应该可以工作。如果是 M2M 关系,它不会默认情况下工作,但您可以添加 obj.save_m2m() 然后 update_api 调用,它应该
  • 这是一对多。但是相关字段没有更新...
  • 您可以尝试在管理员中覆盖 save_related() 调用,只需将其放在 save_formset() 循环之后

标签: django django-admin


【解决方案1】:

解决我的问题的方法是将我的代码放入 UserAdmin.save_formset() 方法中。

似乎这是用户提交表单后从 django 调用的最后一个方法(至少我是这么认为的)。

这是代码的sn-p:

class UserAdmin(admin.ModelAdmin):
    model = User
    
    def save_formset(self, request, form, formset, change):
        super().save_formset(self, request, form, formset, change)
        user = form.instance
        update_api(user)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2017-05-06
    相关资源
    最近更新 更多