Django中如何获取Project关联的Group对象数组?
解决Django模型关联属性报错的问题
嘿,这个问题其实是related_name的设置搞混了,我来帮你捋清楚:
你在Group模型的外键字段里,把related_name设成了"projects"——这个参数的作用是告诉Django:在关联的Project对象上,用什么名字来访问对应的Group集合。所以现在Django给Project对象生成的属性是projects,而不是你尝试调用的groups。
有两种简单的解决方式:
直接用正确的属性名调用:
既然你设置的related_name是projects,那直接用这个名字加上.all()(因为它是一个QuerySet,需要用all()来获取所有关联对象):print(project.projects.all())修改related_name为更直观的名称:
如果觉得projects这个名字容易混淆(毕竟关联的是Group对象),可以把Group模型的外键定义改成这样:class Group(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="groups")修改后,你就可以用
project.groups.all()来获取这个Project关联的所有Group对象了,这样代码逻辑也更清晰。
补充一下:如果你不手动设置related_name,Django会自动生成默认的属性名<小写模型名>_set,也就是group_set,这时候你也可以用project.group_set.all()来获取关联集合,但自定义一个清晰的related_name肯定是更好的选择。
内容的提问来源于stack exchange,提问作者user2950593
相关产品推荐
相关产品推荐

