﻿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
8389	Q expression with & and | inconsistent	Torsten Bronger <bronger@…>	Malcolm Tredinnick	"I use Q expressions in my DB query. It doesn't find anything although it should.

Consider the following models.py:

{{{
from django.db import models
from django.db.models import Q
import django.contrib.auth.models
from django.contrib import admin

class Sample(models.Model):
    pass

class SampleSeries(models.Model):
    originator = models.ForeignKey(django.contrib.auth.models.User)
    samples = models.ManyToManyField(Sample, blank=True)

class UserDetails(models.Model):
    user = models.OneToOneField(django.contrib.auth.models.User)
    my_samples = models.ManyToManyField(Sample, blank=True)

import sys
if sys.argv[1] == ""runserver"":
    try:
        user = django.contrib.auth.models.User.objects.get(username=""bronger"")
    except django.contrib.auth.models.User.DoesNotExist:
        user = django.contrib.auth.models.User(username=""bronger"", password=""12345"")
        user.save()
    try:
        user_details = UserDetails.objects.get(user=user)
    except UserDetails.DoesNotExist:
        user_details = UserDetails(user=user)
        user_details.save()
    if not SampleSeries.objects.count():
        SampleSeries(originator=user).save()
    print SampleSeries.objects.filter(
        Q(samples__userdetails=user_details) | (Q(originator=user_details.user) & Q(originator=user_details.user)))
}}}

It will print

{{{[]}}}

However, if you delete on of the (obviously redundant) ""Q(originator=user_details.user)"", it does find the one !SampleSeries:

{{{[<SampleSeries: SampleSeries object>]}}}
"		closed	Database layer (models, ORM)	1.0-alpha		duplicate		bronger@…	Unreviewed	0	0	0	0	0	0
