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.