django自动更新用户; save()得到了意外的关键字参数'force_insert' [英] django autoupdate user; save() got an unexpected keyword argument 'force_insert'

查看:444
本文介绍了django自动更新用户; save()得到了意外的关键字参数'force_insert'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为使用 此处中所述的ModelAdmin save_model .我无法解决kwarg错误"save()得到了意外的关键字参数'force_insert'".

I'm trying to implement an auto update for the user who creates a record using ModelAdmin save_model as described here. I wasn't able to work out how to get around the kwarg error "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)

文档指出

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

"The save_model method is given the HttpRequest, a model instance, a ModelForm instance and a boolean value based on whether it is adding or changing the object."

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

Is this something automatic or do I need to pass it in from the view? If that's not the issue, then what else could it be?

将代码改回匹配的示例.

changed code back to match example.

推荐答案

更新

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

If you have overridden save() method of Activity or some other Models that get saved in meanwhile, but forgotten to accept force_insert as keyword argument, this error could happen:

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

检查引用以找到失败的save

Check the trackback to locate the failed save

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

Your code does not fully follow the code from b-list.org, try:

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

这篇关于django自动更新用户; save()得到了意外的关键字参数'force_insert'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆