Учитывая следующие модели:
class Blog(models.Model):
name = models.CharField()
class Entry(models.Model):
blog = models.ForeignKey(Blog)
content = models.CharField()
Я надеюсь передавать следующее шаблону:
blogs = Blog.objects.filter(entry__content__contains = 'foo')
result = [(blog, blog.entry_set.filter(content__contains = 'foo'))
for blog in blogs]
render_to_response('my.tmpl', {'result': result}
Однако "Blog.objects.filter (...)" возвращает тот же объект Блога многократно, если больше чем одна запись соответствия найдена.
Как Вы удаляете дубликаты? Или еще лучше, я пропускаю более простой способ передать список соответствий к шаблонам?
Добавление .distinct()
даст вам только четкие результаты.
См. QuerySet API Docs для функции "distinct()":
Returnns a new QuerySet that use SELECT DISTINCT в своем SQL-запросе. Этот исключает дублирующие строки из результаты запроса.
По умолчанию QuerySet не будет устранить дублирующие ряды. На практике, это редко бывает проблемой, потому что простые запросы, такие как Blog.objects.all() не вводит параметр возможность дублирования строк результата. Однако, если ваш запрос охватывает несколько таблицы, можно получить дубликаты результаты, когда оценивается QuerySet. Именно тогда вы бы использовали clear().