ОК, я могу ошибаться здесь.Я провел небольшой тест, и он дал мне правильный результат, но мне пришлось бы тратить больше времени на тестирование, а у меня его сейчас нет.
Вы можете попробовать это:
vendor_list = Vendor.objects.filter(category=category, active=True)
vendor_list = vendor_list.filter(Q(review__product__isnull=True)|Q(review__isnull=True)).annotate(rating_avg=Avg('review__rating'))
(Фильтр разделен на две строки, чтобы его было легче читать, но его можно объединить)
Идея состоит в том, что сначала вы выбираете всех поставщиков, а затем фильтруете тех, у кого либо нет отзывов о товаре, либо нет отзывов навсе.Затем вы аннотируете их.
Рейтинг тех поставщиков, у которых отсутствует отзыв, будет Нет, не 0.