suppose have model in django
class person(models.model): first_name = models.charfield(max_length=30) last_name = models.charfield(max_length=30)
now want create serializer in rest metadata models.
like resulting json should contain
//rough example { first_name: {max_length: 30}, last_name: {max_length:30} }
my aim meta data on fly , create forms dynamically using angularjs schema forms
any idea on how can read meta data models
you can model's fields , metadata this:
def get_model_metadata(model_class, meta_whitelist=[]): field_list = model_class._meta.fields return_data = {} field in field_list: field_name = field.name field_meta = field.__dict__ return_meta = {} meta_name in field_meta: if meta_name in meta_whitelist: return_meta[meta_name] = field_meta[meta_name] if len(return_meta) > 0: return_data[field_name] = return_meta return return_data
usage:
from django.contrib.auth.models import user get_model_metadata(user, meta_whitelist=['max_length'])
returns:
{ 'username': {'max_length': 30}, 'first_name': {'max_length': 30}, 'last_name': {'max_length': 30}, 'is_active': {'max_length': none}, 'email': {'max_length': 75}, 'is_superuser': {'max_length': none}, 'is_staff': {'max_length': none}, 'last_login': {'max_length': none}, 'password': {'max_length': 128}, u'id': {'max_length': none}, 'date_joined': {'max_length': none} }
improvements method include blacklist of field metadata, whitelist/blacklist fields, , maybe boolean not showing metadata has none value.