[Django]-Python/Django debugging: print model's containing data

24๐Ÿ‘

โœ…

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']
๐Ÿ‘คZach Kelling

25๐Ÿ‘

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

๐Ÿ‘คRisadinha

11๐Ÿ‘

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

๐Ÿ‘คdr jimbob

4๐Ÿ‘

Maybe try something suggested here:

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

JSON format is easy to print and read ๐Ÿ˜‰

1๐Ÿ‘

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('_')]
๐Ÿ‘คRami Elwan

-1๐Ÿ‘

Why donโ€™t you implement __unicode__ :

def __unicode__(self):
    return self.whatever_field + self.another_field
๐Ÿ‘คGeo

Leave a comment