Обратная связь Django с select related
у меня есть 4 модели, и я хочу получить соединение между ними
ModelA
class ModelA(models.Model):
product = models.ForeignKey(ModelB)
group = models.ForeignKey(Group)
ModelB
class ModelB(models.Model):
title = models.CharField()
ModelC
class ModelC(models.Model):
product = models.ForeignKey(ModelB)
group = models.ForeignKey(ModelD)
ModelD
class ModelD(models.Model):
name = models.CharField()
теперь я хочу, чтобы все мои ModelA объекты зарегистрирован с ModelB, ModelC и ModelD В sql это довольно легко сделать. Просто сделайте соединения между таблицы. С Django ORM я застрял, потому что я могу делать только прямые отношения.
я делаю это
ModelA.objects.all().select_related(product)
но я не могу присоединиться к ModelC Я уже прочитал в этой статье, но я не хочу перебирать мой большой список, чтобы сделать простую вещь! И я хочу попасть в базу данных только один раз.
я использую последнюю версию Django, и я надеюсь, что уже есть решение этого, о котором я не знаю.
спасибо.
2 ответов
посмотреть документы на prefetch_related. Это dev только на данный момент, но ударит с Django 1.4. Если вы можете подождать или вы можете работать на багажнике. Ты сможешь это использовать.
тем временем, вы можете попробовать django-batch-выберите. По существу, она служит той же цели.
Edit: после повторного чтения проблемы решение не так просто.
на docs говорят:
select_related
ограничивается однозначными отношениями-внешний ключ и один на один.
Django 1.4 запросы будут иметь prefetch_related метод, который вы обязательно должны прочитать. Похоже, вы не сможете сделать это за один запрос, но вы можете сделать это за 2 или 3. Вы должны определенно взгляните и обновите версию dev, если вам это действительно нужно.
Если вы не можете использовать версию dev и не можете ждать 1.4, django также поддерживает пользовательские SQL-запросы.