Django использует одну и ту же переменную в разных функциях
Я пытаюсь сделать следующее: получить данные из стороннего приложения и показать их на странице. Я буду получать данные в функции get_context_data
и использовать те же данные в методе get_initial
. У меня не получилось это сделать. Есть ли способ сделать это?
Пример кода
class UpdateView(generic.FormView):
template_name = 'test.html'
form_class = myForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
MYVARIABLE = fetch_data_from_3rd_party_app()
context["MYVARIABLE"] = MYVARIABLE
return context
def get_initial(self):
initial = super().get_initial()
# I want to assign MYVARIABLE.data to initial["data"] here.
initial["data"] = MYVARIABLE
return initial
Есть несколько вариантов
Сначала есть подход, который используют общие представления из Django: хранить переменную на self
, присваивать ее в какой-то ранней точке запроса (dispatch, get, post и т.д.), чтобы она была доступна тому, кому она нужна
class UpdateView(generic.FormView):
def dispatch(self, request, *args, **kwargs):
self.myvariable = fetch_data_from_3rd_party_app()
return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["MYVARIABLE"] = self.myvariable
return context
def get_initial(self):
initial = super().get_initial()
initial["data"] = self.myvariable
return initial
Я неравнодушен к использованию кэшированного свойства , присвоение self
вне __init__
кажется мне немного неправильным (хотя на самом деле в этом нет ничего плохого)
from django.utils.functional import cached_property
class UpdateView(generic.FormView):
@cached_property
def myvariable(self):
return fetch_data_from_3rd_party_app()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["MYVARIABLE"] = self.myvariable
return context
def get_initial(self):
initial = super().get_initial()
initial["data"] = self.myvariable
return initial