﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28724	QuerySet filter across m2m returns incorrect number of objects	Zach	nobody	"{{{#!python
# models
from django.db import models

class ProductArea(models.Model):
  name = models.CharField(max_length=100)

class Product(models.Model):
  name = models.CharField(max_length=100)
  product_areas = models.ManyToManyField(ProductArea, through='Relationship')

class MembershipLevel(models.Model):
  name = models.CharField(max_length=100)

class Relationship(models.Model):
  product = models.ForeignKey(Product)
  product_area = models.ForeignKey(ProductArea)
  membership_level = models.ForeignKey(MembershipLevel)
}}}

{{{#!python
from myapp.models import MembershipLevel
from myapp.models import ProductArea
from myapp.models import Relationship
from myapp.models import Product

p1, _ = Product.objects.get_or_create(name='My Product')
p2, _ = Product.objects.get_or_create(name='Another Product')
p3, _ = Product.objects.get_or_create(name='Yet another product')

a1, _ = ProductArea.objects.get_or_create(name='Air')
a2, _ = ProductArea.objects.get_or_create(name='Land')
a3, _ = ProductArea.objects.get_or_create(name='Sea')

m1, _ = MembershipLevel.objects.get_or_create(name='gold')
m2, _ = MembershipLevel.objects.get_or_create(name='bronze')
m3, _ = MembershipLevel.objects.get_or_create(name='silver')

Relationship.objects.get_or_create(product=p1, product_area=a1, membership_level=m1)
Relationship.objects.get_or_create(product=p1, product_area=a2, membership_level=m2)
Relationship.objects.get_or_create(product=p1, product_area=a3, membership_level=m3)
Relationship.objects.get_or_create(product=p2, product_area=a1, membership_level=m1)
Relationship.objects.get_or_create(product=p2, product_area=a2, membership_level=m2)
Relationship.objects.get_or_create(product=p2, product_area=a3, membership_level=m3)
Relationship.objects.get_or_create(product=p3, product_area=a1, membership_level=m1)
Relationship.objects.get_or_create(product=p3, product_area=a2, membership_level=m2)
Relationship.objects.get_or_create(product=p3, product_area=a3, membership_level=m3)

# ""total found: 3"".
print('total found: %s' % Product.objects.count())

# ""total with filter found: 9"".
print('total with filter found: %s' % Product.objects.filter(product_areas__relationship__membership_level__name='gold').count())
}}}"	Bug	closed	Uncategorized	1.11	Normal	invalid			Unreviewed	0	0	0	0	0	0
