問題來自django。這是默認的做法,但我不明白。班級裏面的元類,如何獲得頂級班的名字
我有一個元類需要一個小類的原始類的名稱。我怎麼弄到的?
class Student(models.Model):
class Meta:
db_table = #by default this becomes "student"
問題來自django。這是默認的做法,但我不明白。班級裏面的元類,如何獲得頂級班的名字
我有一個元類需要一個小類的原始類的名稱。我怎麼弄到的?
class Student(models.Model):
class Meta:
db_table = #by default this becomes "student"
您可以使用一個裝飾器來做到這一點。在課程初始化期間,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
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
我得到「type object has no attribute Meta」 – Kiarash
@Kiarash請嘗試更新的版本。 –