gpt4 book ai didi

python - Django:如何在不导入模型的情况下使用 _meta 指定verbose_name?

转载 作者:行者123 更新时间:2023-12-04 10:46:35 27 4
gpt4 key购买 nike

这是一个简单的模型定义,使用外键导入:

from companies.models.owner_company import OwnerCompany

class Restaurant(models.Model):
owner_company = models.ForeignKey(OwnerCompany,
on_delete=models.PROTECT,
verbose_name=OwnerCompany._meta.verbose_name)

假设现在,我需要在不导入 OwnerCompany 的情况下定义它目的。
在这种情况下,您将如何定义verbose_name?
class Restaurant(models.Model):
owner_company = models.ForeignKey('companies.OwnerCompany',
on_delete=models.PROTECT,
verbose_name='???')

最佳答案

您可以创建一个“代理对象”,用于 str(..)返回详细名称。例如:

from django.apps import apps

class VerboseName:

def __init__(self, app_name, model_name=None):
if self.model_name is None:
self.app_name, self.model_name = app_name.split('.', 1)
else:
self.app_name = app_name
self.model_name = model_name

def __str__(self):
return str(apps.get_model(self.app_name, self.model_name)._meta.verbose_name)

那么我们就可以用这个 VerboseName目的:
class Restaurant(models.Model):
owner_company = models.ForeignKey(
'companies.OwnerCompany',
on_delete=models.PROTECT,
verbose_name=VerboseName('companies', 'OwnerCompany')
)

或者用一个点:
class Restaurant(models.Model):
owner_company = models.ForeignKey(
'companies.OwnerCompany',
on_delete=models.PROTECT,
verbose_name=VerboseName('companies.OwnerCompany')
)

但是,此处需要应用程序的名称。

关于python - Django:如何在不导入模型的情况下使用 _meta 指定verbose_name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com