问题来自django。这是默认情况下的事情,但我不明白如何做。
我有一个Meta Class需要一个原始类名称的小写。我怎么能得到它?
class Student(models.Model):
class Meta:
db_table = #by default this becomes "student"
答案 0 :(得分:1)
您可以使用装饰器。在类初始化期间Student
不存在,因此您只能在类定义之后设置它。
def lower_db_name(cls):
cls._meta.db_table = cls.__name__.lower()
return cls
@lower_db_name
class Student(models.Model):
class Meta:
pass
答案 1 :(得分:1)
Django使用元类来完成它。你可以做类似的事情:
class ModelMeta(type):
def __new__(cls, cls_name, bases, attrs):
if 'Meta' in attrs and not hasattr(attrs['Meta'], 'db_table'):
attrs['Meta'].db_table = cls_name.lower()
return super(ModelMeta, cls).__new__(cls, cls_name, bases, attrs)
class Model:
__metaclass__ = ModelMeta
class Student(Model):
class Meta:
thing = 12