Hello Django users, I'm having trouble with an exclude statement and
was hoping some kind soul could help me out. My models are simple,
it's basically just two models with a ForeignKey relationship.

class Parent(models.Model):
  pass
class Child(models.Model):
  name = models.CharField(maxlength=100)
  parent = models.ForeignKey(Parent)

I want to get every parent who does not have a child named "Bob". I
initially thought this would just be one exclude statement -

Parent.objects.exclude(child__name="Bob")[:100]

However, this gives me a list that includes many parents multiple
times - basically each parent is in the list once for each child not
named Bob, even if they do have a child named Bob. This makes sense
looking at the sql query -

SELECT "foo_parent"."id" FROM "foo_parent" INNER JOIN "foo_child" AS
"foo_parent__child" ON "foo_parent"."id" =
"foo_parent__child"."parent_id" WHERE ((NOT
("foo_parent__child"."name" = Bob))) DESC LIMIT 100

But what I really want is to discard a parent entirely if they have a
child named Bob.

Any advice for what I'm doing wrong here, or suggestions on a
workaround? I'm using django version 0.96. Often > 99% of the parents
have children named Bob, so I'd rather avoid filtering them out in
python.

Thanks in advance!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to