请参阅下面的更新
我什至不知道如何为我的问题起一个简短的标题。
在一个类中,我有一些类的类属性StringField
:
class Authors(Table):
# id field is already present
first_name = StringField(maxLength=100)
last_name = StringField(maxLength=100)
StringField
构造函数可能会接收一个名为name
. 如果没有给出,我希望它等于类属性的名称(first_name
在last_name
上面的示例中)。
是否可以提取创建的实例将分配给的变量的名称?我想我必须使用inspect
模块?
我看到 Django 这样做:
除 ForeignKey、ManyToManyField 和 OneToOneField 外,每个字段类型都采用可选的第一个位置参数——详细名称。如果没有给出详细名称,Django 将使用字段的属性名称自动创建它,将下划线转换为空格。
在此示例中,详细名称是“人的名字”:
first_name = models.CharField("person's first name", max_length=30)
在此示例中,详细名称是“名字”:
first_name = models.CharField(max_length=30)
但是我在 Django 1.3.1 源代码中找不到我需要的部分。
更新:
简化:
class Field():
def __init__(self, field_name=None):
if not field_name:
field_name = ??? # some magic here to determine the name
print(field_name)
class Table():
first_name = Field()
last_name = Field()
运行它应该打印first_name
和last_name
解决方案:
class Field():
def __init__(self, name=None):
self._name = name
class Table():
first_name = Field()
last_name = Field()
for attrName, attr in Table.__dict__.items():
if isinstance(attr, Field):
if attr._name is None:
attr._name = attrName
print(Table.first_name._name)
print(Table.last_name._name)