这是一个简单的模型定义,使用导入作为外键:
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')
)
但是,此处需要应用程序的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句