Tom, make your line read: results = Film.objects.filter( Q(title__icontains=q) | Q(director__name__icontains=q) | Q(actors__name__icontains=q) | Q(screenwriters__name__icontains=q) | Q(genre__icontains=q) ).distinct()
So just add the distinct method to the Q set. And then you won't need the while loop at all. Read: http://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct Hope that helps. Luke On Sat, Aug 8, 2009 at 9:19 AM, Thomas Scrace<t.scr...@gmail.com> wrote: > > Hi all, > > In order to teach myself Django I am creating a simple film database > project. My search code looks like this: > > results = Film.objects.filter( > Q(title__icontains=q) | > Q(director__name__icontains=q) | > Q(actors__name__icontains=q) | > Q(screenwriters__name__icontains=q) | > Q(genre__icontains=q) > ) > > This lets me have a 'catch-all' search box that allows you to search > on all of the fields of my film class. It works, but I always get > duplicate results. The same film will appear several times (typically > 3, 4 or 6 times) in the search results. > > As a sort of kluge to get around this, and to try to further diagnose > what was happening, I wrote the following to try to remove duplicate > results: > > films = list(results) > while len(films) > 1: > if films[len(films)-1] == films[len(films)-2]: > films.remove(films[len(films)-1]) > This executes without any errors, but does not remove duplicate > results from the list, from which I can only infer that for some > reason the results that I think are identical are in fact different in > some way. > > My models look like this: > > class Director(models.Model): > name = models.CharField(max_length=70) > > def __unicode__(self): > return u'%s' % (self.name,) > > class Actor(models.Model): > name = models.CharField(max_length=70) > > def __unicode__(self): > return u'%s' % (self.name,) > > class Screenwriter(models.Model): > name = models.CharField(max_length=70) > > def __unicode__(self): > return u'%s' % (self.name,) > > > class Film(models.Model): > title = models.CharField(max_length=100) > genre = models.CharField(max_length=40) > actors = models.ManyToManyField(Actor) > screenwriters = models.ManyToManyField(Screenwriter) > director = models.ForeignKey(Director) > release_date = models.DateField(blank=True, null=True) > > > def __unicode__(self): > return self.title > > Does anybody have any ideas on what is happening here? I am flummoxed!. > > Thanks in advance, > > Tom > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---