2015-10-16 20 views
3

Рассмотрите следующее:Django: object_set vs filter

У меня есть модель изображения, в которой используется бренд как внешний ключ.

brand = Brand.objects.get(id = whatever) 

Я мог бы получить все изображения, связанные с этой моделью с одним из следующих способов:

images = Image.objects.filter(brand = brand) 

или

images = brand.image_set.all() 

С точки зрения производительности, что один из них быстрее?

ответ

4

Не будет различий в производительности. В обоих случаях сгенерированный SQL-запрос будет таким же.

Поэтому, который вы выбираете, это вопрос вкуса. Лично я предпочитаю

Images = Image.objects.filter(brand=brand) 

потому что очень ясно, что вы возвращаете запрос на изображение.

Однако можно утверждать, что

images = brand.image_set.all() 

безопаснее, так как фильтрация бренда автоматически, в то время как в другом случае вы могли забыть фильтровать по brand=brand.