gpt4 book ai didi

python - dir(models.Model.Blog) 没有显示 Blog 的类变量(Fields),为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:34 26 4
gpt4 key购买 nike

模型.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) 不包含 titlebody 类变量(意外)。 dir(bm.Blog()) 但是确实包含那些类变量(预期)。

>>> 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', '_state', 'body', 'clean', 'clean_fields', 'date_error_message',
'delete', 'full_clean', 'id', 'objects', 'pk', 'prepare_database_save', 'save',
'save_base', 'serializable_value', 'title', 'unique_error_message', 'validate_unique']

那么为什么当我调用 Django Model 子类的 dir 函数时看不到该类的类变量?

最佳答案

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

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

关于python - dir(models.Model.Blog) 没有显示 Blog 的类变量(Fields),为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com