Complex objects passed as args/kwargs between class based views in Django











up vote
0
down vote

favorite












I currently have a SessionWizardView from formtools package implemented.



class DataframeFormView(SessionWizardView):
def done(self,form_list):
params={}
for form in form_list:
params.update(form.cleaned_data)
return HttpResponseRedirect(reverse('download',kwargs={'params':params}))


Everything is working fine in the forms view, and when the forms are successfully filled the above mentioned function runs, however I need to pass the params argument to another view:



from django_downloadview import VirtualDownloadView, VirtualFile
class DataframeDownloadView(VirtualDownloadView):
def get_file(self):
### Access params dictionary here!!!!

return VirtualFile(tfile.name, name=tfile.name)


Thing I've tried:



1) override __init__ to add self.params = kwargs.pop('params')



2) create method to access to kwargs specific key params using return self.kwargs['params']



3) Mixin solution (probably badly implemented but I thing there are constraints in these two CBVs)



Ultimately, suing method 1 and 2, I manage to access merely to a string representation of the params dictionary through reversing to download/url/. I need a more programatically solution to obtain the original dict object. TLDR: How can I pass complex objects between views.



Best regards,










share|improve this question




















  • 1




    If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
    – kungphu
    Nov 8 at 5:30















up vote
0
down vote

favorite












I currently have a SessionWizardView from formtools package implemented.



class DataframeFormView(SessionWizardView):
def done(self,form_list):
params={}
for form in form_list:
params.update(form.cleaned_data)
return HttpResponseRedirect(reverse('download',kwargs={'params':params}))


Everything is working fine in the forms view, and when the forms are successfully filled the above mentioned function runs, however I need to pass the params argument to another view:



from django_downloadview import VirtualDownloadView, VirtualFile
class DataframeDownloadView(VirtualDownloadView):
def get_file(self):
### Access params dictionary here!!!!

return VirtualFile(tfile.name, name=tfile.name)


Thing I've tried:



1) override __init__ to add self.params = kwargs.pop('params')



2) create method to access to kwargs specific key params using return self.kwargs['params']



3) Mixin solution (probably badly implemented but I thing there are constraints in these two CBVs)



Ultimately, suing method 1 and 2, I manage to access merely to a string representation of the params dictionary through reversing to download/url/. I need a more programatically solution to obtain the original dict object. TLDR: How can I pass complex objects between views.



Best regards,










share|improve this question




















  • 1




    If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
    – kungphu
    Nov 8 at 5:30













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I currently have a SessionWizardView from formtools package implemented.



class DataframeFormView(SessionWizardView):
def done(self,form_list):
params={}
for form in form_list:
params.update(form.cleaned_data)
return HttpResponseRedirect(reverse('download',kwargs={'params':params}))


Everything is working fine in the forms view, and when the forms are successfully filled the above mentioned function runs, however I need to pass the params argument to another view:



from django_downloadview import VirtualDownloadView, VirtualFile
class DataframeDownloadView(VirtualDownloadView):
def get_file(self):
### Access params dictionary here!!!!

return VirtualFile(tfile.name, name=tfile.name)


Thing I've tried:



1) override __init__ to add self.params = kwargs.pop('params')



2) create method to access to kwargs specific key params using return self.kwargs['params']



3) Mixin solution (probably badly implemented but I thing there are constraints in these two CBVs)



Ultimately, suing method 1 and 2, I manage to access merely to a string representation of the params dictionary through reversing to download/url/. I need a more programatically solution to obtain the original dict object. TLDR: How can I pass complex objects between views.



Best regards,










share|improve this question















I currently have a SessionWizardView from formtools package implemented.



class DataframeFormView(SessionWizardView):
def done(self,form_list):
params={}
for form in form_list:
params.update(form.cleaned_data)
return HttpResponseRedirect(reverse('download',kwargs={'params':params}))


Everything is working fine in the forms view, and when the forms are successfully filled the above mentioned function runs, however I need to pass the params argument to another view:



from django_downloadview import VirtualDownloadView, VirtualFile
class DataframeDownloadView(VirtualDownloadView):
def get_file(self):
### Access params dictionary here!!!!

return VirtualFile(tfile.name, name=tfile.name)


Thing I've tried:



1) override __init__ to add self.params = kwargs.pop('params')



2) create method to access to kwargs specific key params using return self.kwargs['params']



3) Mixin solution (probably badly implemented but I thing there are constraints in these two CBVs)



Ultimately, suing method 1 and 2, I manage to access merely to a string representation of the params dictionary through reversing to download/url/. I need a more programatically solution to obtain the original dict object. TLDR: How can I pass complex objects between views.



Best regards,







python django django-formtools






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 8 at 3:51









ruddra

9,76332547




9,76332547










asked Nov 8 at 3:27









André Guerra

27110




27110








  • 1




    If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
    – kungphu
    Nov 8 at 5:30














  • 1




    If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
    – kungphu
    Nov 8 at 5:30








1




1




If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
– kungphu
Nov 8 at 5:30




If you need to keep a significant amount of state around between page loads, you might consider using the session rather than trying to pass it around in the URL.
– kungphu
Nov 8 at 5:30












1 Answer
1






active

oldest

votes

















up vote
0
down vote













As suggested by kungphu, probably the best way to share complex objects between views is using the view session.
For future reference, I end up doing the following:



def done(self,form_list,**kwargs):
params={}
for form in form_list:
params.update(form.cleaned_data)
self.request.session['params']=params
return HttpResponseRedirect(reverse(self.download_url_name))


and I also changed the session serializer to pickle.






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53201134%2fcomplex-objects-passed-as-args-kwargs-between-class-based-views-in-django%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    As suggested by kungphu, probably the best way to share complex objects between views is using the view session.
    For future reference, I end up doing the following:



    def done(self,form_list,**kwargs):
    params={}
    for form in form_list:
    params.update(form.cleaned_data)
    self.request.session['params']=params
    return HttpResponseRedirect(reverse(self.download_url_name))


    and I also changed the session serializer to pickle.






    share|improve this answer

























      up vote
      0
      down vote













      As suggested by kungphu, probably the best way to share complex objects between views is using the view session.
      For future reference, I end up doing the following:



      def done(self,form_list,**kwargs):
      params={}
      for form in form_list:
      params.update(form.cleaned_data)
      self.request.session['params']=params
      return HttpResponseRedirect(reverse(self.download_url_name))


      and I also changed the session serializer to pickle.






      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        As suggested by kungphu, probably the best way to share complex objects between views is using the view session.
        For future reference, I end up doing the following:



        def done(self,form_list,**kwargs):
        params={}
        for form in form_list:
        params.update(form.cleaned_data)
        self.request.session['params']=params
        return HttpResponseRedirect(reverse(self.download_url_name))


        and I also changed the session serializer to pickle.






        share|improve this answer












        As suggested by kungphu, probably the best way to share complex objects between views is using the view session.
        For future reference, I end up doing the following:



        def done(self,form_list,**kwargs):
        params={}
        for form in form_list:
        params.update(form.cleaned_data)
        self.request.session['params']=params
        return HttpResponseRedirect(reverse(self.download_url_name))


        and I also changed the session serializer to pickle.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 9 at 18:27









        André Guerra

        27110




        27110






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53201134%2fcomplex-objects-passed-as-args-kwargs-between-class-based-views-in-django%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Academy of Television Arts & Sciences

            L'Équipe

            1995 France bombings