Accessing Models After get_model()

54 views
Skip to first unread message

llanitedave

unread,
Dec 21, 2014, 9:44:58 PM12/21/14
to django...@googlegroups.com
I'm trying to display a list of the models in my app on a web page, similar to the way the Django Admin does it.  I'm not sure where the admin section is coded, which might be part of my problem.

I'm using Django 1.7, and have built a very simple view:

from django.db.models import get_app, get_models 

def index(request):
app = get_app('sampledb')
modellist = get_models(app)
context = {'my_models': modellist}
return render(request, 'sampledb/index.html', context)

in my index.html page I created a table:

{% if my_models %}
    <p>{{ my_models }}</p>
    <table>
        <thead>
    <tr>
        <th scope="col">Name</th>
<th scope="col">Verbose Plural</th>
    </tr>
</thead>
<tbody>
    {% for model in my_models %}
    <tr>
        <td>{{ model.name }}</td>
<td>{{ model.meta.verbose_name_plural }}</td>
    </tr>
    {% endfor %}
</tbody>
    </table>
{% endif %}


When I run this, my webpage first displays the <p>{{ my_models }}</p>, showing a list of model classes, such as <class 'sampledb.models.Sites'>, <class 'sampledb.models.People'>, etc.

I guess that's my first hint that getting attributes from the 'model.name' isn't going to display anything, and it doesn't.  But it doesn't give an error, either.

How do I dig into the class to retrieve the actual model so that I can display its attributes?

Collin Anderson

unread,
Dec 22, 2014, 10:51:58 PM12/22/14
to django...@googlegroups.com
Hi,

The model name is hidden in model.__name__ or model._meta.model_name, and you can't access attributes starting with underscore in templates.

This might work:

from django.db.models import get_app, get_models

def index(request):
    app
= get_app('sampledb')

    modeldict
= {model._meta.model_name: model for model in get_models(app)}
   
return render(request, 'sampledb/index.html', {'my_models': modeldict)

Collin

llanitedave

unread,
Dec 26, 2014, 11:13:16 PM12/26/14
to django...@googlegroups.com
Thank you, Collin!  That's just what I was looking for! 
Reply all
Reply to author
Forward
0 new messages