/ / django autoupdate user; save () ma nieoczekiwany argument słowa kluczowego 'force_insert' - django, django-admin, auto-update

django autoupdate user; save () ma nieoczekiwany argument słowa kluczowego 'force_insert' - django, django-admin, auto-update

Próbuję zaimplementować automatyczną aktualizację dla użytkownika, który tworzy rekord za pomocą ModelAdmin save_model jak w opisie tutaj. Nie byłem w stanie obliczyć, jak obejść błąd kwarg "save () ma nieoczekiwany argument słowa kluczowego" 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)

The dokumentacja stwierdza, że

"Metoda save_model otrzymuje HttpRequest, instancję modelu, a Instancja ModelForm i wartość boolowska w zależności od tego, czy jest dodawana lub zmieniając obiekt. "

Czy to jest coś automatycznego, czy też muszę je przekazać z widoku? Jeśli to nie jest problem, to co jeszcze może być?

EDYCJA: zmienił kod z powrotem, aby dopasować przykład.

Odpowiedzi:

29 dla odpowiedzi nr 1

aktualizacja

Jeśli nadpisałeś save() metoda Activity lub inne modele, które zostaną zapisane w międzyczasie, ale zapomniane, aby je zaakceptować force_insert jako argument słowa kluczowego ten błąd może się zdarzyć:

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

Sprawdź trackback, aby zlokalizować błąd save


Twój kod nie jest w pełni zgodny z kodem z b-list.org, spróbuj:

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