Django Filter __в нескольких полях и нескольких моделях

Я пытаюсь отфильтровать несколько полей в моделях и получить точное соответствие.

Я застрял здесь. Если я выбираю один Tube Продукт, то Machine Модель показывает 102 продукта. А если я выбираю Tube + Drum Продукт, то он показывает 190 продуктов. (Должен быть соответствующий продукт, но в моем случае этого не происходит)

models.py

class Machine(models.Model):
    name = models.CharField(max_length=1330)
    code = models.CharField(max_length=1500,null=True, blank=True
    block = models.CharField(max_length=1500,null=True, blank=True)
    compatable = models.CharField(max_length=1500,null=True, blank=True)
    .
    .

    def __str__(self):
        return str(self.id)

class Motor(models.Model):
    name = models.CharField(max_length=1330)
    code = models.CharField(max_length=1500,null=True, blank=True)
    code1 = models.CharField(max_length=1500,null=True, blank=True)
    code2 = models.CharField(max_length=1500,null=True, blank=True)
    .
    .

    def __str__(self):
        return str(self.id)

class Tube(models.Model):
    name = models.CharField(max_length=1330)
    block = models.CharField(max_length=1500,null=True, blank=True)
    block1 = models.CharField(max_length=1500,null=True, blank=True)
    block2 = models.CharField(max_length=1500,null=True, blank=True)      
    .
    .

    def __str__(self):
        return str(self.id)

class Drum(models.Model):
    name = models.CharField(max_length=1330)
    compatable = models.CharField(max_length=1500,null=True, blank=True)
    compatable1 = models.CharField(max_length=1500,null=True, blank=True)
    compatable2 = models.CharField(max_length=1500,null=True, blank=True)      
    .
    .

    def __str__(self):
        return str(self.id)

Если мы выбираем по одному продукту из каждой модели "Motor, Tube & Drum" и все данные попадают в модель CART, то запрос должен отфильтровать 3 поля, сопоставить и показать продукты Exact Machine и наоборот.

Я сделал что-то подобное в views.py

def machine(request):
    
    combine =  CartMotor.objects.values_list('motor__code', flat = True)
    combine1 = CartMotor.objects.values_list('motor__code1', flat = True)
    combine2 = CartMotor.objects.values_list('motor__code2', flat = True)
    combine3 = CartTube.objects.values_list('tube__block', flat = True)
    combine4 = CartTube.objects.values_list('tube__block1', flat = True)
    combine5 = CartTube.objects.values_list('tube__block2', flat = True)
    combine6 = CartDrum.objects.values_list('drum__compatable', flat = True)
    combine7 = CartDrum.objects.values_list('drum__compatable1', flat = True)
    combine8 = CartDrum.objects.values_list('drum__compatable2', flat = True)  

    combine9 = combine.union(combine1, combine2, all= True)
    combine10 = combine3.union(combine4, combine5, all= True)
    combine11 = combine6.union(combine7, combine8, all= True)

    combine12 = combine9.union(combine10, combine11, all= True)

    machine = Machine.objects.filter(Q(code__in=combine9) | Q(block__in=combine10) | Q(compatable__in=combine11)) if combine12 else Machine.objects.all().order_by('id')

Но после этого он не фильтрует правильный точный результат. Посмотрите код выше и дайте мне сказать, где я ошибаюсь.

Вернуться на верх