gpt4 book ai didi

django - 在 Django 中动态地从对象 _meta 获取外键的详细名称

转载 作者:行者123 更新时间:2023-12-02 00:29:36 25 4
gpt4 key购买 nike

为简单起见,使用如下模型:

 class Plan(models.Model)
name = models.CharField(max_length=255, verbose_name="Phone Plan Name")
monthly_charge = models.FloatField()
class Company(models.Model):
name = models.CharField(max_length=255, verbose_name="Company Full Name")
phone_plan = models.ForeignKey(Plan)
class Client(models.Model):
name = models.CharField(max_length=255, verbose_name="Client Full Name")
company = models.ForeignKey(Company)

给定一个字符串,我想知道是否有一种简单的方法来检索模型属性的详细名称,即使该字符串遍历外键也是如此。

我知道我可以通过

获取 Client 属性的详细名称
Client._meta.get_field("name").verbose_name 

这将导致“客户全名”。

但是如果我有字符串“company__phone_plan__name”,我不能简单地使用

Client._meta.get_field("company__phone_plan__name").verbose_name

到达“电话计划名称”,因为它会产生错误。

这些字符串将是动态的,所以我想知道获得属性的正确详细名称的最简单方法是什么,即使它遍历模型?

这个特殊情况使用的是 Django 1.11

最佳答案

这不是很好的答案,但如果你需要你想要的,你可以使用这个功能:

def get_verbose_name(model, string):
fields = string.split('__')

for field_name in fields[:-1]:
field = model._meta.get_field(field_name)

if field.many_to_one:
model = field.foreign_related_fields[0].model
elif field.many_to_many or field.one_to_one or field.one_to_many:
model = field.related_model
else:
raise ValueError('incorrect string')

return model._meta.get_field(fields[-1]).verbose_name

此函数获取模型名称和字符串并返回详细名称

你可以这样使用它:

get_verbose_name(Client, 'company__phone_plan__name')

关于django - 在 Django 中动态地从对象 _meta 获取外键的详细名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410442/

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