2015-04-28 44 views
2

假設我有在Django我怎樣才能提取metdata從Django模型

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

這個模型現在我想創建REST串行讓所有從模型中的元數據。

像生成的JSON應該包含

//rough example 
    { 
    first_name: {max_length: 30}, 
    last_name: {max_length:30} 
    } 

我的目的是爲了獲得在運行中的元數據,然後創建動態使用angularJS架構形式形成

我如何可以讀取元的任何想法模型數據

+0

您可以使用[django-angular](https://github.com/jrief/django-angular)構建您的表格 –

回答

3

你可以得到一個模型的領域和它們的元數據是這樣的:

def get_model_metadata(model_class, meta_whitelist=[]): 
    field_list = model_class._meta.fields 
    return_data = {} 
    for field in field_list: 
    field_name = field.name 
    field_meta = field.__dict__ 
    return_meta = {} 
    for 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 

用法:

from django.contrib.auth.models import User 
get_model_metadata(User, meta_whitelist=['max_length']) 

返回:

{ 
    '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} 
} 

改進這種方法將包括黑名單字段元數據,白名單/黑名單字段,也可能是一個不顯示具有None值的元數據的布爾值。

+0

感謝您的支持,我會試一試 – user3214546

+0

歡迎您! – biomorgoth

1

您應該能夠通過自省,cf dir(Person._meta)獲取該信息:您可以使用Person._meta.get_all_field_names(),然後使用Person._meta.get_field_by_name('first_name')來獲取該字段並提取m礦石信息。