#32809: Filtering with Q and OR gets duplicated entries
-------------------------------------+-------------------------------------
     Reporter:  Ismael Jerez         |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  3.2
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  queryset, Q,         |             Triage Stage:
  filtering, OR, annotation, |       |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Ismael Jerez):

 * status:  closed => new
 * resolution:  needsinfo =>


Comment:

 Hi again:

 I am sorry for not being able to reproduce this before. Here is a simple
 example:

 1) models.py:
 {{{
 from django.contrib.auth.models import User
 from django.db import models


 class Example(models.Model):
     example_attr = models.CharField(max_length=100)
     users = models.ManyToManyField(User)
 }}}

 2) I created two User's instances from admin site:
 - username = 'admin'
 - username = 'other'

 And two Group's instances from admin site:
 - name = 'Group1'
 - name = 'Group2'

 Associate Group1 and Group2 to users 'admin' and 'other' from admin site
 too.

 3) Now the code:
 {{{
 from example.models import Example
 from django.db.models import Q
 from django.contrib.auth.models import User, Group

 example = Example.objects.create(example_attr='have a nice day')
 user1 = User.objects.get(username='admin')
 user2 = User.objects.get(username='other')
 example.users.add(user1, user2)
 filters = Q(example_attr__icontains='a') |
 
Q(users__in=User.objects.filter(groups__in=[Group.objects.get(name='Group1').pk]))
 print(Example.objects.count()) # This prints "1"
 print(Example.objects.filter(filters).count()) # This prints "2"
 }}}

 Hope this helps to reproduce the bug.

 This bug is happening since Django 3.2.0 until 3.2.4.


 Thanks in advance,
 Ismael.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32809#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/072.43a29428a39000efe79d75c7e5998635%40djangoproject.com.

Reply via email to