У меня есть следующие модели:
class PersonDetails(models.Model):
id = models.AutoField(db_column='ID', primary_key=True)
name= models.CharField(db_column='Name', max_length=20, blank=True, null=True)
class Meta:
managed = False
db_table = 'person_details'
class Npr(models.Model):
rid = models.AutoField(db_column='rid', primary_key=True)
pid = models.ForeignKey(PersonDetails, on_delete=models.CASCADE, db_column='PID')
rel = models.CharField(max_length=1)
cid = models.ForeignKey(PersonDetails, on_delete=models.CASCADE, db_column='CID')
class Meta:
managed = False
db_table = 'npr'
unique_together = (('pid', 'cid'),)
Я построил следующий набор запросов:
idf = Npr.objects.select_related('cid').filter(pid = 198)
ids = Npr.objects.select_related('pid').filter(cid = 198)
all = ids.union(idf)
, и результирующий оператор SQL выглядит так:
(SELECT `npr`.`rid`, `npr`.`PID`, `npr`.`rel`, `npr`.`CID`, T3.`ID`, T3.`Name` FROM `npr` INNER JOIN `person_details` T3 ON (`npr`.`PID` = T3.`ID`) WHERE `npr`.`CID` = 198)
UNION
(SELECT `npr`.`rid`, `npr`.`PID`, `npr`.`rel`, `npr`.`CID`, T3.`ID`, T3.`Name` FROM `npr` INNER JOIN `person_details` T3 ON (`npr`.`CID` = T3.`ID`) WHERE `npr`.`PID` = 198)
мои данные Npr:
+------+-----+-----+------+
| rid | PID | rel | CID |
+------+-----+-----+------+
| 40 | 198 | F | 2111 |
| 42 | 198 | F | 2110 |
| 1377 | 198 | F | 1243 |
| 3305 | 198 | F | 236 |
| 3379 | 198 | F | 203 |
| 3384 | 198 | H | 200 |
| 3388 | 213 | F | 198 |
| 3389 | 218 | M | 198 |
+------+-----+-----+------+
Теперь посмотрите на следующее
>>> a0=all[0]
>>> a7=all[7]
>>>
>>> a0.cid.id
198
>>> a0.pid.id
213
a0 возвращает ожидаемые результаты, но
>>> a7.cid.id
2111
>>> a7.pid.id
2111
a7 не возвращает ожидаемый Результаты! ожидаемый результат a7.pid.id = 198. К тому же; a0.cid.id отправляет следующий оператор SQL в базу данных:
SELECT `person_details`.`ID`, `person_details`.`Name` FROM `person_details` WHERE `person_details`.`ID` = 198 LIMIT 21
, а a0.pid.id - нет. Почему вторая часть набора запросов объединения не дает правильных результатов!?
Django Версия: 3.0.4 Python версия: 3.7.3 База данных: 10.3.22-MariaDB-0 + deb10u1- журнал