动态获取关联两个 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)
我将 Parent
和 Child
模型存储在脚本的变量中。鉴于这两个模型,我如何动态获取字段名称 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
假设我有以下 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)
我将 Parent
和 Child
模型存储在脚本的变量中。鉴于这两个模型,我如何动态获取字段名称 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