Django: фильтрация на связанном объекте, удаление дубликатов из результата
дал следующие модели:
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}
, "Блог.объекты.фильтр.(..) "возвращает один и тот же объект блога несколько раз, если найдено несколько совпадающих записей.
Как удалить дубликаты? Или еще лучше, мне не хватает более простого способа передать список совпадений шаблонам?
2 ответов
посмотреть QuerySet API Docs для функции " distinct ()":
возвращает новый набор запросов, который использует Выберите DISTINCT в своем SQL-запросе. Этот исключает повторяющиеся строки из результат запроса.
по умолчанию QuerySet не будет исключить повторяющиеся строки. На практике, это редко является проблемой, потому что простые запросы, такие как Блог.объекты.all() не вводите возможность дублирования строк. Однако, если ваш запрос охватывает несколько таблицы, можно получить дубликат результаты при оценке QuerySet. Вот когда вы используете distinct ().