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

2024-06-16 09:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个使用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()


Tags: 对象django方法模型fieldfieldsreturn属性
1条回答
网友
1楼 · 发布于 2024-06-16 09:35:43

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

from django.db import model

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

您可以获得以下引用的模型:

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

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

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

相关问题 更多 >