首页 > 解决方案 > Django orm 从外来对象获取其他外键对象

问题描述

我对这个可能很简单的问题感到困惑。

我的模型:

class DiseaseLibrary(models.Model):
    name = models.CharField(max_length=255)
    subadults = models.BooleanField(default=False,blank=True)
    adults = models.BooleanField(default=False, blank=True)

    def __str__(self):
        return self.name

class BoneChangeBoneProxy(models.Model):
    anomalies = models.ForeignKey('DiseaseLibrary', on_delete=models.CASCADE, related_name='anomalies')
    technic = models.ForeignKey('Technic', on_delete=models.CASCADE, related_name='technic_proxy')
    bone_change = models.ForeignKey('BoneChange', blank=True, null=True, on_delete=models.CASCADE, related_name='bone_change_proxy')
    bone = TreeManyToManyField('Bone', related_name='bone_proxy')

从DiseaseLibrary,我想通过related_name“异常”获取所有链接到它的对象。即“technic_proxy”、“bone_change_proxy”、“bone_proxy”,它们是其他模型的外键。

我希望通过相关名称“异常”和_set访问

>>> ds = DiseaseLibrary.objects.all().first()
>>> ds.name
'Some nice name'
>>> ds.anomalies
<django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x107fa4f10>
>>> ds.anomalies_set.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'DiseaseLibrary' object has no attribute 'anomalies_set'
>>> 

如何通过模型 DiseaseLibrary 访问模型 BoneChangeBoneProxy 中的所有 ForeignKey 值?

标签: django

解决方案


由于您已设置related_name='anomalies',因此您可以使用以下命令进行查询:

#      ↓ related_name of the ForeignKey
ds.anomalies.all()

推荐阅读