Django: dynamically access queryset data from different models











up vote
1
down vote

favorite












I'm interested in learning how to display all attributes of a list of querysets that come from different models.



Here's an example:



models.py



class MyModelA(models.Model):
attr1 = something
attr2 = something

class MyModelB(models.Model):
attr3 = something
attr4 = something

class MyModelC(models.Model):
attr5 = something
attr6 = something


views.py



Let's say we have three model instances that are stored in a list:



all_selected_queries = [mymodela, mymodelb, mymodelc]


For each queryset in the list, I want to display all model field titles and data in a template.



My approach:



# Loop through the list and get the verbose name title of each field ("titel")

for z in all_selected_queries:
queryset_fields = z._meta.get_fields()
for f in queryset_fields:
titel = f.verbose_name.title()
return titel


What challenges me is how to get the fields' values without having to include the actual attribute name (because they are different for each queryset).



So instead of explictly calling



f.attr1, f.attr2, f.attr3, f.attr4, f.attr5


for each field, I'd like to encounter a solution that works across model boundaries.



Thank you very much for your help!










share|improve this question


























    up vote
    1
    down vote

    favorite












    I'm interested in learning how to display all attributes of a list of querysets that come from different models.



    Here's an example:



    models.py



    class MyModelA(models.Model):
    attr1 = something
    attr2 = something

    class MyModelB(models.Model):
    attr3 = something
    attr4 = something

    class MyModelC(models.Model):
    attr5 = something
    attr6 = something


    views.py



    Let's say we have three model instances that are stored in a list:



    all_selected_queries = [mymodela, mymodelb, mymodelc]


    For each queryset in the list, I want to display all model field titles and data in a template.



    My approach:



    # Loop through the list and get the verbose name title of each field ("titel")

    for z in all_selected_queries:
    queryset_fields = z._meta.get_fields()
    for f in queryset_fields:
    titel = f.verbose_name.title()
    return titel


    What challenges me is how to get the fields' values without having to include the actual attribute name (because they are different for each queryset).



    So instead of explictly calling



    f.attr1, f.attr2, f.attr3, f.attr4, f.attr5


    for each field, I'd like to encounter a solution that works across model boundaries.



    Thank you very much for your help!










    share|improve this question
























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I'm interested in learning how to display all attributes of a list of querysets that come from different models.



      Here's an example:



      models.py



      class MyModelA(models.Model):
      attr1 = something
      attr2 = something

      class MyModelB(models.Model):
      attr3 = something
      attr4 = something

      class MyModelC(models.Model):
      attr5 = something
      attr6 = something


      views.py



      Let's say we have three model instances that are stored in a list:



      all_selected_queries = [mymodela, mymodelb, mymodelc]


      For each queryset in the list, I want to display all model field titles and data in a template.



      My approach:



      # Loop through the list and get the verbose name title of each field ("titel")

      for z in all_selected_queries:
      queryset_fields = z._meta.get_fields()
      for f in queryset_fields:
      titel = f.verbose_name.title()
      return titel


      What challenges me is how to get the fields' values without having to include the actual attribute name (because they are different for each queryset).



      So instead of explictly calling



      f.attr1, f.attr2, f.attr3, f.attr4, f.attr5


      for each field, I'd like to encounter a solution that works across model boundaries.



      Thank you very much for your help!










      share|improve this question













      I'm interested in learning how to display all attributes of a list of querysets that come from different models.



      Here's an example:



      models.py



      class MyModelA(models.Model):
      attr1 = something
      attr2 = something

      class MyModelB(models.Model):
      attr3 = something
      attr4 = something

      class MyModelC(models.Model):
      attr5 = something
      attr6 = something


      views.py



      Let's say we have three model instances that are stored in a list:



      all_selected_queries = [mymodela, mymodelb, mymodelc]


      For each queryset in the list, I want to display all model field titles and data in a template.



      My approach:



      # Loop through the list and get the verbose name title of each field ("titel")

      for z in all_selected_queries:
      queryset_fields = z._meta.get_fields()
      for f in queryset_fields:
      titel = f.verbose_name.title()
      return titel


      What challenges me is how to get the fields' values without having to include the actual attribute name (because they are different for each queryset).



      So instead of explictly calling



      f.attr1, f.attr2, f.attr3, f.attr4, f.attr5


      for each field, I'd like to encounter a solution that works across model boundaries.



      Thank you very much for your help!







      django python-3.x django-views django-queryset






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 at 14:54









      Katharina

      104




      104
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote



          accepted










          You can try like this:



          v_list = list()
          for z in all_selected_queries:
          queryset_fields = z._meta.get_fields()
          values = dict()
          for f in queryset_fields:
          values[f.verbose_name.title()] = getattr(z, f.attname)
          v_list.append(values)
          return render(request,'some_template.html',{'values':v_list})


          And show them in template:



          {% for value in values %}
          {% for key, val in value.items %}
          <b>{{ key }}: </b>{{ val }}
          {% endfor %}
          {% endfor %}





          share|improve this answer























          • Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
            – Katharina
            Nov 11 at 16:37











          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%2f53249921%2fdjango-dynamically-access-queryset-data-from-different-models%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



          accepted










          You can try like this:



          v_list = list()
          for z in all_selected_queries:
          queryset_fields = z._meta.get_fields()
          values = dict()
          for f in queryset_fields:
          values[f.verbose_name.title()] = getattr(z, f.attname)
          v_list.append(values)
          return render(request,'some_template.html',{'values':v_list})


          And show them in template:



          {% for value in values %}
          {% for key, val in value.items %}
          <b>{{ key }}: </b>{{ val }}
          {% endfor %}
          {% endfor %}





          share|improve this answer























          • Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
            – Katharina
            Nov 11 at 16:37















          up vote
          0
          down vote



          accepted










          You can try like this:



          v_list = list()
          for z in all_selected_queries:
          queryset_fields = z._meta.get_fields()
          values = dict()
          for f in queryset_fields:
          values[f.verbose_name.title()] = getattr(z, f.attname)
          v_list.append(values)
          return render(request,'some_template.html',{'values':v_list})


          And show them in template:



          {% for value in values %}
          {% for key, val in value.items %}
          <b>{{ key }}: </b>{{ val }}
          {% endfor %}
          {% endfor %}





          share|improve this answer























          • Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
            – Katharina
            Nov 11 at 16:37













          up vote
          0
          down vote



          accepted







          up vote
          0
          down vote



          accepted






          You can try like this:



          v_list = list()
          for z in all_selected_queries:
          queryset_fields = z._meta.get_fields()
          values = dict()
          for f in queryset_fields:
          values[f.verbose_name.title()] = getattr(z, f.attname)
          v_list.append(values)
          return render(request,'some_template.html',{'values':v_list})


          And show them in template:



          {% for value in values %}
          {% for key, val in value.items %}
          <b>{{ key }}: </b>{{ val }}
          {% endfor %}
          {% endfor %}





          share|improve this answer














          You can try like this:



          v_list = list()
          for z in all_selected_queries:
          queryset_fields = z._meta.get_fields()
          values = dict()
          for f in queryset_fields:
          values[f.verbose_name.title()] = getattr(z, f.attname)
          v_list.append(values)
          return render(request,'some_template.html',{'values':v_list})


          And show them in template:



          {% for value in values %}
          {% for key, val in value.items %}
          <b>{{ key }}: </b>{{ val }}
          {% endfor %}
          {% endfor %}






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 11 at 15:55

























          answered Nov 11 at 15:39









          ruddra

          10.8k32647




          10.8k32647












          • Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
            – Katharina
            Nov 11 at 16:37


















          • Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
            – Katharina
            Nov 11 at 16:37
















          Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
          – Katharina
          Nov 11 at 16:37




          Thank you, @ruddra It works perfectly and I am very, very grateful that you saved me a lot of typing.
          – Katharina
          Nov 11 at 16:37


















          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%2f53249921%2fdjango-dynamically-access-queryset-data-from-different-models%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







          Popular posts from this blog

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma