【问题标题】:How to get the current App name in models.py in Django?如何在 Django 中的 models.py 中获取当前的应用程序名称?
【发布时间】:2012-06-11 21:15:08
【问题描述】:

我有一个名为 C3po 的应用程序。我正在研究模型“文章”。在这个模型中,我想为另一个名为 Lea 的应用程序中的模型创建一个带有自定义相关名称的 ForeignKey 字段。为了确保related_name 是唯一的,我想将其命名为“c3po_articles”。但我不想硬编码应用名称 c3po。如何以动态方式获取文件夹/应用程序名称?我是使用 __file__ 并拆分它还是有更优雅的方法?

感谢您的帮助:)

【问题讨论】:

  • 你可以使用model.app_name,但是你的代码中应该会使用关系名,所以我看不出为什么这种动态方式会足够灵活......
  • 对不起,我没完全理解。我不应该这样做吗?我只是希望以后能够在不编辑整个代码的情况下重命名模型。
  • related_name 用于从关系中加载值 - 例如如果 related_name="articles",那么您使用 myobj.articles.all() 加载所有可用于 myobj 的文章。在不编辑使用该关系的代码的情况下,我看不到重命名related_name 的方法吗?我错过了什么吗?

标签: python django python-2.7 django-1.4


【解决方案1】:

related_name 属性支持使用两个变量进行自动字符串插值:app_labelclass。例如:

models.ForeignKey(FooModel, related_name='%(app_label)s_%(class)s_foo')

现在,老实说,我不确定 Django 是否会让你只包含一个或另一个,即只包含 '%(app_label)s_foo',但你可以尝试。 (仔细查看文档后,我非常怀疑。似乎两者兼而有之,但仍然,您自己测试一下。)

见:https://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name

编辑

实际上,经过深思熟虑,对于您的情况,您可以使用'%(app_label)s_%(class)ss',它应该将您的c3po_articles 用作related_name

【讨论】:

    猜你喜欢
    • 2013-04-09
    • 2013-11-30
    • 1970-01-01
    • 2011-01-06
    • 2010-11-24
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多