Как передать запрос/пользователя в модель Django
Вот моя модель:
class ExamForm(forms.ModelForm):
...
STATE_CHOICES = (
(PASS, PASS),
(FAILED, FAILED),
(GREAT, GREAT),
state = forms.CharField(choices=STATE_CHOICES)
class Meta:
model = Exam
fields = ('state',)
def save(self, *args, **kwargs):
request = kwargs.get('request', None)
print(f'user {request.user} saved the model')
super().save(*args, **kwargs)
...
А вот моя модель администратора, я переопределяю метод save_model для передачи запроса в мою модель:
@admin.register(Exam)
class ExamModelAdmin(admin.ModelAdmin):
...
fields = ('state',)
list_display = ('state',)
form = ExamForm
...
def save_model(self, request, obj, form, change):
obj.save(request=request)
super().save_model(request, obj, form, change)
Но я получаю ошибку:
save() got an unexpected keyword argument 'request'
Для этого потребуется переопределить/изменить метод модели save()
, например:
class Exam(models.Model):
...
def save(self, *args, **kwargs):
request = kwargs.pop('request', None)
# print(f'user {request.user} saved the model')
...
super().save(*args, **kwargs)
Попробуйте так, возможно, вы сможете получить в kwargs в методе сохранения модели.
def save_model(self, request, obj, form, change):
obj.save({"request": request})
super().save_model(request, obj, form, change)