【问题标题】:django autoupdate user; save() got an unexpected keyword argument 'force_insert'django 自动更新用户; save() 得到了一个意外的关键字参数“force_insert”
【发布时间】:2012-10-06 13:37:46
【问题描述】:

我正在尝试为使用ModelAdmin save_model 创建记录的用户实现自动更新,如here 所述。我无法弄清楚如何解决 kwarg 错误“save() got an unexpected keyword argument 'force_insert'”。

admin.py
from myapp.myproj.models import Activity
from django.contrib import admin

class ActivityAdmin(admin.ModelAdmin):
    exclude = ('cruser',)
    list_display = ('activity_nm', 'activity_desc', 'startdt', 'enddt','upddt','crdt')

    def save_model(self, request, obj, form, change):
        if not change:
            obj.cruser = request.user
        obj.save()

admin.site.register(Activity, ActivityAdmin)

documentation 声明

"save_model 方法被赋予了 HttpRequest,一个模型实例,一个 ModelForm 实例和一个基于是否添加的布尔值 或更改对象。”

这是自动的还是我需要从视图中传递它?如果这不是问题,那还能是什么?

编辑:将代码改回以匹配示例。

【问题讨论】:

    标签: django django-admin auto-update


    【解决方案1】:

    更新

    如果您覆盖了Activitysave() 方法或其他一些同时保存的模型,但忘记接受force_insert 作为关键字参数,则可能会发生此错误:

    def save(self):
       ...
    # should be
    def save(self, force_insert=False, force_update=False, using=None):
        ...
    # or at least
    def save(self, **kwargs):
        ...
    

    检查引用以定位失败的save


    您的代码不完全遵循 b-list.org 中的代码,请尝试:

    def save_model(self, request, obj, form, change): 
        if not change:
            obj.cruser = request.user
        obj.save() 
    

    【讨论】:

    • 感谢您指出这一点。这是我做的一些测试留下的。我将其更改为正确的代码,但仍然抛出相同的错误。
    • @jabs 你是否覆盖了Activitysave() 方法或其他一些也被保存的模型。
    • 就是这样。我的模型上有一个 save() 方法。谢谢!
    • 你好@jabs,你能提供一个代码sn-p来说明你的解决方案吗?
    • @ThéoT.Carranza - 我想我现在做不到。如果可以,我会发布它。祝你好运。
    【解决方案2】:

    作为一般规则,您应该只在模型本身中覆盖save() 方法,而不是在某些模型管理员中。

    在模型中覆盖 save() 方法时,您应该始终使用(*args, **kwargs) 以确保安全。在保存特定模型时,您无法知道使用了哪些特定参数。

    您的Activity 模型应该包含这样的方法:

    def save(self, *args, **kwargs):
        '''do your custom stuff here'''
        return super(Activity, self).save(*args, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多