Python/Django debugging: print model's containing data

Question:

Maybe easy question but I don’t know how to summarize it that I would find my answer.

Is it possible to print out all available fields of model?

For example in iPython I can import model and just write model name and tab will show all available fields the models have.

Is it possible to do this in code without using some sort of shell?

I would like to use some sort of command (e.a. print_fields(self)) and get what’s inside the model.

Asked By: JackLeo

||

Answers:

Why don’t you implement __unicode__ :

def __unicode__(self):
    return self.whatever_field + self.another_field
Answered By: Geo

To check fields on a model I usually use ?:

>>> Person?
Type:       ModelBase
Base Class: <class 'django.db.models.base.ModelBase'>
String Form:    <class 'foo.bar.models.Person'>
Namespace:  Interactive
File:       /home/zk/ve/django/foo/bar/models.py
Docstring:
    Person(id, first_name, last_name)

You can also use help(). If you have an instance of the model you can look at __dict__:

>>> [x for x in Person().__dict__.keys() if not x.startswith('_')]
<<< ['first_name', 'last_name', 'id']
Answered By: zeekay

Maybe try something suggested here:

data = serializers.serialize("json", models.MyModel.objects.all(), indent=4)

JSON format is easy to print and read 😉

Answered By: Xaerxess

I think you just want to use __dict__ on an instance of a model. (It won’t give methods like tab completion in ipython though). Also using __doc__ is quite helpful usually.

Also look into inspect http://docs.python.org/library/inspect.html

Answered By: dr jimbob

If you have the model instance(s) you can simply call:

model_queryset.all().values()

https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values

For just the list of fields using the model class itself see Django: Get list of model fields?

or directly the documentation – for Django 1.10 there is a dedicated section on how to work with fields: https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-all-field-instances-of-a-model

Answered By: Risadinha

Inspired by @zeekay’s answer, use the following to see the fields and corresponding values for an instance of a model:

[x for x in Cheese.objects.all()[0].__dict__.items() if not x[0].startswith('_')]
Answered By: Rami Elwan
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.