14

ここで説明するように、 ModelAdminsave_modelを使用してレコードを作成するユーザーの自動更新を実装しようとしています。kwargエラー「save()が予期しないキーワード引数'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インスタンス、およびオブジェクトを追加するか変更するかに基づいたブール値が与えられます。」

これは自動のものですか、それともビューから渡す必要がありますか?それが問題ではない場合、他に何ができるでしょうか?

編集:例に一致するようにコードを元に戻しました。

4

2 に答える 2

42

アップデート

save()のメソッドActivityまたはその間に保存される他のモデルをオーバーライドしたが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() 
于 2012-10-06T13:43:34.980 に答える
4

原則として、save()一部のモデル管理者ではなく、モデル自体のメソッドのみをオーバーライドする必要があります。

モデルでsave()メソッドをオーバーライドするときは、(*args, **kwargs)安全のために常に使用する必要があります。特定のモデルが保存されているときに、どの特定のパラメーターが使用されているかを知る方法はありません。

モデルActivityには、次のようなメソッドが含まれている必要があります。

def save(self, *args, **kwargs):
    '''do your custom stuff here'''
    return super(Activity, self).save(*args, **kwargs)
于 2019-02-28T20:35:13.573 に答える