从模型的Meta子类中获取app_label
我正在尝试用一些配置来覆盖一个模型的 db_table
,具体代码如下:
class MyModel(models.Model):
class Meta:
db_table = "app_label_table_name"
不过,我希望能够以编程的方式访问 app_label
。
通常,我可以这样做: MyModel._meta.app_label
。但是,我在老式的 Meta 类里面无法成功获取这个属性。
self.app_label
不管用,因为在那个上下文中似乎没有self
。MyModel._meta.app_label
也不行,可能是因为MyModel
还没有被定义。
我该如何在这个上下文中以编程方式获取 app_label
呢?有没有其他方法可以做到这一点?
1 个回答
3
根据Django的源代码,app_label
是从 __module__
属性中提取的(可以查看这个链接了解更多:https://github.com/django/django/blob/master/django/db/models/base.py)。这个源代码使用了元类,并从传递给这个元类定义的参数 attrs 中获取 __module__
。虽然我对这具体是什么意思不是很清楚,但在这个情况下,app_label
和 __module__
看起来是一样的。