(使用 Django 1.11)
这个问题变得令人困惑,因为报告的行为不是相关领域的现代行为。此处的示例,JobTemplate
模型类在哪里,并且credentials
是多对多相关字段:
>>> JobTemplate._meta.get_field('credentials').__class__
django.db.models.fields.related.ManyToManyField
如果我们检查_meta
一个对象,它会有所不同吗?
>>> JobTemplate.objects.first()._meta.get_field('credentials').__class__
django.db.models.fields.related.ManyToManyField
不。
所以在这里我插入我认为最有可能有人来到这里的情况。你有这个:
>>> JobTemplate.objects.first().credentials
<django.db.models.fields.related_descriptors.ManyRelatedManager at 0x6f9b390>
请注意,这就是 OP 所拥有的。
我将规定相关模型是Credential
. 我可以检查这是否是相关的凭证管理器!
>>> isinstance(JobTemplate.objects.first().credentials, Credential.objects.__class__)
True
ManyToMany 字段可能很难处理,因为该属性会杀死自己并用管理器子类替换自己。您还可以将这些信息与获得的字段交叉引用get_field('credentials')
以更加确定。上述isinstance
检查也可能错误地选择您在模型上设置的其他管理器。但是,这仍然是一个有价值的测试,可以查看您拥有的属性是否“嘎嘎”该特定相关模型的 ManyToMany 字段应该如何。