У меня следующая модель Django ORM. Видео имеет FK для Person, а Person имеет PK для Position.
class Video(models.Model):
title = models.CharField(max_length=35)
url = models.URLField()
person = models.ForeignKey('Person',
on_delete=models.SET_DEFAULT,
default=1,
null=False,
blank=False)
class Person(models.Model):
firstName = models.CharField(max_length=100, null=False)
lastName = models.CharField(max_length=100)
linkedIn = models.URLField(blank=True)
position = models.ForeignKey('Position', on_delete=models.SET_DEFAULT, default=1)
picture = models.FileField(upload_to=getFilePath)
class Position(models.Model):
title = models.CharField(max_length=100, null=False, blank=False)
company = models.ForeignKey('Company',
on_delete=models.SET_DEFAULT,
default=1,
null=False)
location = models.ForeignKey('Location',
on_delete=models.SET_DEFAULT,
default=1,
null=False)
Если я запрашиваю без select_related, я получаю следующее:
(Pdb) videoModel.objects.filter(Q(**{'position__department':''}))
<QuerySet [<Video: titleGeneral @ General @ companyA Fulltime Fulltime>]>
Если я добавляю select_related, он возвращает null.
(Pdb) videoModel.objects.filter(Q(**{'position__department':''})).select_related('person__position')
<QuerySet []>
PK лица и позиции правильно установлены в этом объекте Video.
(Pdb) videoModel.objects.filter(Q(**{'position__department':''}))[0].natural_key()
{'title': 'titleGeneral', 'url': 'urlGeneral', 'person': {'firstName': 'fnA', 'lastName': 'lnA', 'linkedIn': 'lkinA', 'position': 'titleA @ companyA', 'picture': ''}}
Я использую Django 2.2.13 с серверной частью Djongo / Mongodb.