gpt4 book ai didi

django - 从 django.db.models.fields.related.ForeignKey 获取相关对象

转载 作者:行者123 更新时间:2023-12-04 16:47:54 27 4
gpt4 key购买 nike

从模型对象中,我可以获得相关对象的快捷方式,使用外键字段的名称:

>>> m1 = Mailbox.objects.get(pk=38)
>>> str(m1.localdomainfk)
'framailx.de'

但是如果我有外键字段而不是它的名字,我只能得到相关对象的pk:

>>> f1 = Mailbox._meta.get_field('localdomainfk')
>>> f1.value_from_object(m1)
7

谁能告诉我如何获取相关对象快捷方式,如果我只有本地对象和外键字段?

背景是一个通用的只读 DetailView,其中实际显示的字段列表取决于事件用户(员工用户可以看到所有内容)。

这是模型混合的一部分:

def get_fields(self, staff):
l = self.readonly_fields_for_staff if staff else self.readonly_fields
return [(field.verbose_name, self.get_field_value(field),
self.get_related_object_from_field(field))
for field in l]

def get_field_value(self, field):
if field.is_relation:
return None
else:
return self._get_FIELD_display(field)

def get_related_object_from_field(self, field):
if field.is_relation:
return getattr(self, field.name, None)
else:
return None

get_fields 返回的列表由模板使用。

get_related_object_from_field 包含 Muhammad Tahir 的答案。

最佳答案

您可以使用 getattr

m1 = Mailbox.objects.get(pk=38)
f1 = 'localdomainfk'
f1 = getattr(m1, f1)

关于django - 从 django.db.models.fields.related.ForeignKey 获取相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36399917/

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