Lo que intento hacer es obtener datos de una aplicación de terceros y mostrarlos en la página. Obtendré los datos en la función get_context_data y también usaré los mismos datos en el método get_initial . No pude lograr hacer eso. ¿Hay alguna manera de hacerlo?
Código de ejemplo
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 initialHay un par de opciones
Primero, está el enfoque de que las vistas genéricas de Django toman y almacenan la variable en self , la asignan en algún momento inicial de la solicitud (envío, obtención, publicación, etc.) para que esté disponible para quien lo necesite.
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 Soy bastante partidario de usar una propiedad almacenada en caché , asignarme a mí self fuera de __init__ parece un poco incorrecto (aunque no tiene nada de malo)
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