#31581: Queryset bug when using Q()?
-------------------------------------+-------------------------------------
Reporter: Javier | Owner: nobody
Buzzi |
Type: Bug | Status: new
Component: Database | Version: 3.0
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
I ran this on all the "recent" versions of python and i see the issue on
all of them. At this point, im not 100% sure if it is a problem or not, i
ran across this trying to show some counts in the Admin that had some
search_fields that traversed the model backwards and forwards in order to
match the thing properly.
This is my mocked models of the issue:
{{{
class ModelA(models.Model):
somecriteria = models.CharField(max_length=50)
class ModelC(models.Model):
unimportant = models.CharField(max_length=50)
class ModelB(models.Model):
somerelation = models.ForeignKey(ModelA, on_delete=models.CASCADE)
m2m = models.ManyToManyField(
ModelC,
through='ModelBC'
)
class ModelBC(models.Model):
b = models.ForeignKey(ModelB, on_delete=models.CASCADE)
c = models.ForeignKey(ModelC, on_delete=models.CASCADE)
}}}
The "bug" is shown when i do:
{{{
queryset =
ModelB.objects.select_related('a').annotate(num_c=Count('m2m__id')).values('num_c')
queryset = queryset.filter(Q(modelbc__c__unimportant='1') |
Q(somerelation__somecriteria='1'))
}}}
When i do:
{{{
queryset =
ModelB.objects.select_related('a').annotate(num_c=Count('m2m__id')).values('num_c')
queryset = queryset.filter(modelbc__c__unimportant='1',
somerelation__somecriteria='1')
}}}
it works as expected.
My testing arena can be found here:
https://gist.github.com/kingbuzzman/9fe5470e31a421aa88b2a64e5447e147 see
the comments, for the way to run it.
--
Ticket URL: <https://code.djangoproject.com/ticket/31581>
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/054.a7766b55bc7b36f2c0b77d1775bc688d%40djangoproject.com.