Как объединить нереляционные модели в Django 1.3 на 2 поля - PullRequest
0 голосов
/ 07 марта 2012

У меня есть 2 существующие модели, которые мне нужно объединить, которые не являются реляционными (без внешних ключей). Они были написаны другими разработчиками и не могут быть изменены мной.

Вот их краткое описание:

Модель процесса

  • Имя файла поля
  • Путь к полю
  • Поле чего-то другого
  • Полевой бар

Модель Сервиса

  • Имя файла поля
  • Путь к полю
  • Полевое имя службы
  • Field Foo

Мне нужно объединить все экземпляры этих двух моделей в столбцах имени файла и пути. У меня есть существующие фильтры, которые я должен применить к каждому из них, прежде чем произойдет это соединение.

Пример: * * тысяча тридцать-один

A = Process.objects.filter (что-то другое = 231)

B = Service.objects.filter (foo = 'abc')

результат = A.filter (имя файла = B.filename, путь = B.path)

1 Ответ

1 голос
/ 07 марта 2012

Это отстой, но лучше всего итерировать все модели одного типа и выдавать запросы, чтобы получить объединенные модели для другого типа.

Другой альтернативой является выполнение необработанного SQL-запроса для выполнения этих объединений, получение идентификаторов для каждого объекта модели, а затем извлечение каждой объединенной пары на основе этого. Более эффективен во время выполнения, но его нужно будет поддерживать вручную, если ваша схема развивается.

...