Python dir(models.Model.Blog)没有显示Blog的类变量(字段),为什么?

Python dir(models.Model.Blog)没有显示Blog的类变量(字段),为什么?,python,django,django-models,Python,Django,Django Models,型号。py: from django.db import models class Blog(models.Model): title = models.CharField(max_length=100, unique=True) body = models.TextField() 在Python中对类调用dir函数通常会显示一个包含类变量(如果已定义)的列表。但奇怪的是,当我执行python manage.py shell并执行以下操作时: >>> imp

型号。py:

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=100, unique=True)
    body = models.TextField()
在Python中对类调用
dir
函数通常会显示一个包含类变量(如果已定义)的列表。但奇怪的是,当我执行
python manage.py shell
并执行以下操作时:

>>> import blog.models as bm
>>> dir(bm.Blog)
['DoesNotExist', 'MultipleObjectsReturned', '__class__', '__delattr__', '__dict__', 
'__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', 
'__metaclass__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', 
'__weakref__', '_base_manager', '_default_manager', '_deferred', '_get_FIELD_display', 
'_get_next_or_previous_by_FIELD', '_get_next_or_previous_in_order', '_get_pk_val', 
'_get_unique_checks', '_meta', '_perform_date_checks', '_perform_unique_checks', 
'_set_pk_val', 'clean', 'clean_fields', 'date_error_message', 'delete', 'full_clean', 
'objects', 'pk', 'prepare_database_save', 'save', 'save_base', 'serializable_value', 
'unique_error_message', 'validate_unique']
dir(bm.Blog)
不包含
标题
正文
类变量(意外)<但是,code>dir(bm.Blog())确实包含这些类变量(预期)


那么,为什么在调用Django
模型的dir函数时,我看不到该子类的类变量呢?

这是因为您继承了具有特定元类的db.Model。因此
title=models.CharField
和其他字段(提供表中行的元信息)不是模型类的真实属性,而不是模型实例中此字段的值。但您可以访问它们:

Blog._meta.get_field('title') # models.CharField instance

注意:建议添加一个自定义管理器。啊哈,谢谢!顺便说一句,使用Blog.meta.get\u fields\u with\u model()
首先获取包含这些字段(类变量)的元组。
Blog._meta.get_field('title') # models.CharField instance