Я работаю с моделью:
class Foo(models.Model):
name = models.CharField(max_length=255)
bars = models.ManyToManyField('Bar')
В представлении у меня есть доступ к списку Bar
объектов и мне нужно получить все Foo
объекты, которые имеют любой из Bar
объекты в их списке bars
, поэтому я делаю это:
foos = Foo.objects.filter(bars__in=list_of_bars)
Проблема в том, что есть дубликаты, если Foo
имеет 2 бара, и оба этих бара находятся в моем list_of_bars
, который решается простым distinct
:
foos = Foo.objects.distinct().filter(bars__in=list_of_bars)
Это все хорошо, за исключением того, что добавление DISTINCT
к запросу делает его очень медленным из-за2 миллиона Foo
объектов в базе данных.
С учетом всего сказанного, каким образом вы можете думать о том, что вы не используете DISTINCT
, но достигаете того же набора результатов?Если это связано с изменением модели, это нормально.