(使用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
多對多字段可以是非常困難的過程中,由於屬性會殺死自己,並與經理子類替換其本身。您也可以將此信息與從get_field('credentials')
獲得的字段進行交叉引用,以確保其安全。以上isinstance
支票也可能會錯誤地選取您在模型上設置的其他經理。然而,這仍然是一個有價值的測試,看看您是否「嘎嘎」了該特定相關模型的ManyToMany字段的屬性。
這將是最完美的方式,但我不知道如何獲得多對多字段的字段實例,該字段位於目標模型中..如果您可以幫助我, 'll會加密你的答案:) – amann 2010-05-17 14:17:02
我可以用'object._meta.get_all_field_names()'列出所有的字段,但相應的字段名不能通過'object._meta.get_field('fieldname')'訪問。我可以使用''object._meta.get_field_by_name('fieldname')''來輸出'(,None,False,True)''。其實我不知道如何得到這個字段實例.. –
amann
2010-05-17 14:22:18
明白了:)它是: 'object._meta.get_field_by_name(「fieldname」)[0] .field' – amann 2010-05-17 14:27:06