Я создаю объединение QuerySets, и что-то не складывается. По какой-то причине один элемент дублируется.
Я печатаю: print(len(one), len(two), len(one | two), len((one | two).distinct()))
Я получаю: 8 42 51 50
Как это возможно!?
УТОЧНЕНИЕ:
Я фильтрую сделки, совершенные моей компанией, в которых участвовал один сотрудник.
Я извлекаю из базы данных большой набор сделок, затем получаю два подмножества и объединяю их с ИЛИ (|). Я распечатал весь начальный набор и результат слияния, чтобы проверить, не ошибся ли я при фильтрации набора. Произошло следующее: во всем наборе было 50 сделок, в которых участвовал сотрудник, 8 в одном подмножестве, 42 во втором, но слияние обоих наборов имело 51 печатный идентификатор, показывающий, что один предмет дублировался.
class Users(AbstractBaseUser):
...
email = models.EmailField(max_length=254, unique=True)
def __str__(self):
return self.email
class Dealrooms(models.Model):
...
lead_employee = models.ForeignKey(null=True, related_name='dealroom_lead', to=Users)
supporting_employees = models.ManyToManyField(Users, related_name='dealroom_supporting')
class Deals(models.Model):
...
dealroom = models.OneToOneField(Dealrooms, related_name='deal', null=True)
our_deals = Deals.objects.exclude(...).exclude(...).exclude(...)
one = our_deals.filter(dealroom__lead_employee=user)
two = our_deals.filter(dealroom__supporting_employees__email=user)
print(len(one), len(two), len(one | two), len((one | two).distinct()))
Печатные результаты: 8 42 51 50
У меня нет большого опыта с Python и еще меньше с Django. Я не знаю, как это работает под поверхностью, но математика просто неверна. Я фактически отбросил всю часть кода и извлекаю информацию, которая мне нужна, другим способом, но я все еще хочу понять, что произошло. Как это возможно.