On Monday, November 4, 2013 7:24:47 PM UTC+2, [email protected] wrote:
>
> Anssi,
>
> Thanks for helping.
> I'm sorry to say that your answer went somewhat over my head, my 
> proficiency with SQL is lacking.
>
> What I understood from your explanation:
>  - A filter/exclude that traverses a 1:N relationship(such as foreign key) 
> should target the same row with all of its criteria(kwargs).
>  - Complex queries don't work correctly in exclude when using 
> relationships in 1.5.x
>  - Complex queries don't work correctly in exclude when using 
> relationships in 1.6.x
>
> Did I understand correctly?
>

That is a good summary of the situation, except that the exclude bugs are 
about 1:N (or N:N) relationships, not just any relationship.
 

> If that was the whole of the situation I would be ok, I can work around 
> this issue with multiple exclude statements, such as:
> bees = B.objects.exclude(a__confirmation=False, a__state=1)
> bees = bees.exclude(a__confirmation__isnull=True, a__state=1)
> That should be equivalent to what I was trying to do with:
> confirm_q = Q(a__confirmation=False) | Q(a__confirmation__isnull=True)
> bees = B.objects.exclude(confirm_q, a__state=1)
>
> But my solution of splitting the Q into two queries didn't work, for 
> either 1.5.5 or 1.6rc1.
> Did I miss something?
>

I'd go for a solution where you do:
    a_qs = A.objects.filter(Q(confirmation__isnull=True) | ..., a__state = 
1).values_list('b_id')
    bees = B.objects.exclude(pk__in=a_qs)
If I am not mistaken that is what Django should be doing automatically for 
you.

Seems like django-users is the right forum to continue this discussion 
unless there are more items that are about development of Django itself.

 - Anssi

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/e98bc270-b991-4246-9cd1-f92464478efb%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to