Это можно сделать в Django, но вам нужно будет немного изменить структуру своих моделей:
class Product(models.Model):
name = models.CharField(max_length=50)
product_rank = models.OneToOneField('ProductRank')
class ProductRank(models.Model):
rank = models.IntegerField(default=0)
Теперь, когда вы выбираете объекты Product, вы можете отслеживать отношение один к одному в одном запросе, используя метод select_related () :
Product.objects.filter([...]).select_related()
В результате будет получен один запрос, который выбирает товарные ранги с помощью объединения:
SELECT "example_product"."id", "example_product"."name", "example_product"."product_rank_id", "example_productrank"."id", "example_productrank"."rank" FROM "example_product" INNER JOIN "example_productrank" ON ("example_product"."product_rank_id" = "example_productrank"."id")
Мне пришлось переместить поле отношения между Product и ProductRank в модель Product, поскольку похоже, что select_related () следует за внешними ключами только в одном направлении.