【问题标题】:How can I get the name of app inside a model?如何在模型中获取应用程序的名称?
【发布时间】:2013-05-13 10:53:01
【问题描述】:

我正在尝试编写模型混合,这将给我直接链接到管理员编辑表单:

class EditLinkMixin(models.Model):
    def get_admin_link(self):
        return '/admin/%s/%s/%d/' % (app_name, self.__class__.__name__, self.pk)

    class Meta:
        abstract = True

这将有助于内容管理员一键编辑某些文章(如果他有权限)。 问题是:我怎样才能得到 app_name?另外,我可以通过某种方式获得主应用程序的名称,它具有模块 settings.py 并且是项目的入口点吗?这将有助于从一些可重用的应用程序中直接访问子类声明...

感谢您的建议!

【问题讨论】:

标签: python django


【解决方案1】:

你应该使用Model._meta.app_label

另外:如果你正在创建一个 mixin,你不需要从 models.Model 扩展它并使其抽象。您可以创建一个常规类:

class EditLinkMixin(object):
    def get_admin_link(self):
        return '/admin/%s/%s/%d/' % (self._meta.app_name, self.__class__.__name__, self.pk)

class MyModel(models.Model, EditLinkMixin):
    pass

【讨论】:

  • 非常感谢!关于抽象:如果我定义方法,它工作正常,但如果我需要在我的 mixin 中声明一些字段 - 它应该是 models.Model 类的抽象子类。我说得对吗?.. 那么主应用程序呢?如何在任何可重用的应用程序中获取带有主应用程序的 app_name 的字符串?
  • 是的,你是对的。如果您需要添加字段,则必须创建一个抽象模型。我没有得到最后一部分。
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多