从模型的Meta子类中获取app_label

1 投票
1 回答
636 浏览
提问于 2025-04-17 14:43

我正在尝试用一些配置来覆盖一个模型的 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__ 看起来是一样的。

撰写回答