Django поле select_related изменяет результат фильтра - PullRequest
0 голосов
/ 07 августа 2020

У меня следующая модель 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...