动态获取关联两个 Django 模型的字段名称

Dynamically get field name which relates two Django models

假设我有以下 Django 模型:

class Parent(models.Model):
    name = models.CharField(max_length=50)
    children = models.ManyToManyField("Child")

class Child(models.Model):
    name = models.CharField(max_length=50)

我将 ParentChild 模型存储在脚本的变量中。鉴于这两个模型,我如何动态获取字段名称 children 作为字符串:

def get_field_name(model, related_model):
    # what do I need here

get_field_name(Parent, Child)
# "children"

您可以使用此命令获取模型的字段和类型

fields = Parent._meta.get_fields()

它给出了所有模型的元组和<ManyToManyRel: parent.children> 现在比较 class ,如果它具有多对多关系,则打印属性。 fields 给出了 class 个对象。现在您可以通过遍历元组并打印 class 名称来获取属性的类型。

for i in fields:
     print(i.__class__name)

现在您可以检查多对多字段

您可以尝试以下两行来获取模型的字段。

parent_fields = Parent._meta.fields
# or alternatively
parent_fields = Parent._meta.get_fields()

由于您将从输出中获得一个 ImmutableList,因此您必须通过索引号获取该字段才能将值作为类似这样的字符串

parent_fields[1].attname