django-inspect

Provides inspection conveniences for django models


License
BSD-3-Clause
Install
pip install django-inspect==0.4.1

Documentation

django-inspect

Provides inspection conveniences for django models.

Features

Convenience attributes

all_fields
All model fields, including all relationships (back and forth).
fields
Only local fields, ie. any regular field and relationships (excluding backwards).
non_rel_fields
Basically the same thing as fields, but excluding all relationships.
fk_fields
Local foreign key fields.
backwards_fk_fields
Only backwards foreign key fields.
all_fk_fields
All foreign key fields (back and forth).
m2m_fields
Local many to many fields.
backwards_m2m_fields
Only backwards many to many fields.
all_m2m_fields
All many to many fields (back and forth).

Sub-inspecting

Futher inspection on relationship fields.

After inspecting a model (creating an Inspect instance) call:

inspect.sub_inspect("field")

Paths are supported too:

inspect.sub_inspect("field.other_field..")

It returns a new Inspect instance, containing information about the target model of the relationship field.

Installation

Available through pip:

$ pip install django-inspect

Usage

Simple inspection

from django.contrib.auth.models import User

from django_inspect import Inspect

inspect = Inspect(User)

# Using an instance/object is also possible.
# user = User()
# inspect = Inspect(user)

inspect.fields
[u'id', 'password', 'last_login', 'is_superuser', 'username',
 'first_name', 'last_name', 'email', 'is_staff', 'is_active',
 'date_joined', 'groups', 'user_permissions']

inspect.non_rel_fields
[u'id', 'password', 'last_login', 'is_superuser', 'username',
 'first_name', 'last_name', 'email', 'is_staff', 'is_active',
 'date_joined']

inspect.m2m_fields
['groups', 'user_permissions']

inspect.backwards_fk_fields
['logentry_set']

Sub-inspecting

from django.contrib.auth.models import User

from django_inspect import Inspect

inspect = Inspect(User)

sub_inspect = inspect.sub_inspect("user_permissions")

sub_inspect.all_fields
[u'id', 'name', 'content_type', 'codename']

futher_inspect = sub_inspect.sub_inspect("content_type")
futher_inspect.all_fields
[u'id', 'name', 'app_label', 'model']

# Sub-inspecting by path

sub_inspect = inspect.sub_inspect("user_permissions.content_type")

sub_inspect.all_fields
[u'id', 'name', 'app_label', 'model']

Testing

Install

Run make install to install dev requirements.

Run tests

Run make test to run tests.