Определение начальных значений ModelForm в админке Django с использованием содержимого запроса

Я пытаюсь предварительно заполнить ModelForm для интерфейса администратора моего приложения Django. Я храню некоторые значения в request.session и хочу использовать их для определения параметра initial моего ModelForm. Я могу получить эти значения в ModelAdmin.render_change_form(self, request, context, *args, **kwargs), но я не уверен, как передать их форме. Возможно ли это сделать? Думаю, мне следует использовать фабрику классов (вдохновляясь этим ответом), но я не уверен, где ее вызвать, поскольку ModelAdmin.form - это атрибут класса, а не атрибут экземпляра.

Ниже приведена краткая версия кода, который я использую.

## admin.py

@admin.register(Game)
class GameAdmin(admin.ModelAdmin):
    # ...

    # This is where I'd like to pass the value of request.session["prefill_data"]
    form = GameAdminForm()  # inherits forms.ModelForm()

    def render_change_form(self, request, context, *args, **kwargs):
        self.change_form_template = 'my_app/admin_game.html'

        extra_context = {}
        if "prefill_data" in request.session:
            # I'm able to access this data here
            extra_context["something_available_for_the_template"] = something_i_did_with prefill_data

            # Once I've done what I need I can safely delete the session variable
            del request.session["prefill_data"]

        return super(GameAdmin, self).render_change_form(request, context | extra_context, *args, **kwargs)

    # This is actually the view that populates request.session
    def admin_prefill(self, request):
        # [something something]
        request.session["prefill_data"] = foo

    # This adds the aforementioned view
    def get_urls(self):
        urls = super().get_urls()
        extra_urls = [
            path("prefill", self.admin_prefill, name="stats_game_prefill"),
        ]

        return extra_urls + urls
Вернуться на верх