假设我有以下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>
现在比较类,如果它具有多对多关系,则打印属性。fields
给出了类对象。现在,您可以通过迭代元组并打印类名来获得属性的类型。
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