有没有办法从 QuerySet 中获取外键实例?

Is there a way to get foreign key instance from the QuerySet?

我试图获取存储在 CandidateSkill 模型(In[5])中的外键实例,但想避免使用循环.

我试过 values() 它只是 return 实际 candidate_id(int) 存储在 Candidate模型而不是实例。

models.py

class Candidate(models.Model):
    candidate_id = models.AutoField(primary_key = True)
    name = models.CharField(max_length = 255, null = False)

class CandidateSkill(models.Model):
    candidate_id = models.ForeignKey('hr.Candidate', on_delete = models.CASCADE)
    skill = models.CharField(max_length = 255)

Django Shell

In [1]: from hr.models import CandidateSkill as cds

In [2]: a = cds.objects.filter(skill__icontains = 'py')

In [3]: a
Out[3]: <QuerySet [<CandidateSkill: CandidateSkill object (1)>, <CandidateSkill: CandidateSkill object (2)>, <CandidateSkill: CandidateSkill object (3)>, <CandidateSkill: CandidateSkill object (4)>, <CandidateSkill: CandidateSkill object (10)>]>

In [4]: a[0]
Out[4]: <CandidateSkill: CandidateSkill object (1)>

In [5]: a[0].candidate_id
Out[5]: <Candidate: Clayton Cote>

所以我有办法只获取外键实例并避免使用循环。

如果我对你的问题的理解正确,你想获得所有 CandidateSkill 包含字符串 'py' 的 Candidates?这应该得到你想要的

Candidate.objects.filter(candidateskill__skill__icontains='py')