Django中ManyToManyField在Python Shell中不显示的原因咨询
问题原因及解决办法
嘿,这个坑我之前踩过!其实这是Django的正常设计,完全不是bug~
为什么Employer._meta.fields里看不到ManyToManyField?
Django对模型字段做了分类管理:
_meta.fields只包含直接映射到模型数据库表列的常规字段——比如你看到的id、ForeignKey、CharField这些,它们都是直接存在于employer数据表中的列。- 而
ManyToManyField是特殊的:它不会直接在模型对应的数据库表中新增列,而是会自动生成一张中间关联表来维护两个模型间的多对多关系。所以Django把这类字段单独归类到_meta.many_to_many集合里,不会出现在fields列表中。
怎么查看你的ManyToManyField?
直接执行这条命令就能找到它了:
>>> Employer._meta.many_to_many
这个属性会返回所有定义在Employer模型上的ManyToManyField实例,你添加的那个字段肯定在里面。
额外补充:反向多对多关联
如果你的ManyToManyField是定义在关联的另一个模型上(比如Employee模型里写了employers = models.ManyToManyField(Employer)),要查看Employer对应的反向多对多关联,可以用:
>>> Employer._meta.get_all_related_many_to_many_objects()
内容的提问来源于stack exchange,提问作者aspiring
相关产品推荐
相关产品推荐

