gpt4 book ai didi

python - 如何检测模型属性是否是外键关系? (并检索所有 FK 模型对象)

转载 作者:行者123 更新时间:2023-12-01 07:36:09 25 4
gpt4 key购买 nike

我正在尝试创建一个使用 django 对象动态传播的表,其中每一行都是一个 django 模型对象。如果对象属性是外键,则目标是显示所有可能的 FK 选项的下拉列表。为此,我需要检测对象字段是否是 FK,然后检索所有 FK 对象。

这有两个组成部分:

  • 我正在努力确定对象属性是否是 FK 关系
  • 我正在努力获取与 FK 相同模型的所有对象

伪代码的想法是:

for field in object.fields:
if field is FK:
return field.objects.all()
else:
return field

我知道我可以测试 ForwardManyToOneDescriptor 关系(如下),但是是否有更紧凑的通用方法来测试 FK 关系?

isintance(Foo.bar, db.models.fields.related_descriptors.ForwardManyToOneDescriptor):

是否有任何方法可以通过模型类或类的实例获取 FK 的所有模型对象?Foo.bar.all()Foo.objects.first().bar.all()

最佳答案

您可以访问 _meta 对象并迭代字段,而不是迭代对象字段,例如:

from django.db import model

[f for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]

您可以获取引用的模型:

[f<b>.related_model</b> for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]

因此,您可以通过以下方式获取所有对象的查询集:

[f.related_model<b>.objects.all()</b> for f in t._meta.get_fields() if isinstance(f, models.ForeignKey)]

关于python - 如何检测模型属性是否是外键关系? (并检索所有 FK 模型对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986044/

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