Как передать запрос/пользователя в модель 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)
Вернуться на верх