Моя ситуация:
У меня django модель HOST и модель PACKAGE (с именем и версией), у которой есть FK на host модель. Теперь мне нужно отфильтровать все хосты , у которых есть пакеты с определенным именем и определенной версией .. поэтому что-то вроде Host.objects.filter(name="best_package", version__in=['1.0','2.0'])
Это все красиво и легко, но мне нужно повторить это действие для нескольких пакетов, чтобы я получил хост, у которого есть каждый из желаемых пакетов в одной из версий ..
Я попробовал два подхода, но оба не удалось, сначала применялся filter выше в for l oop, это было некрасиво, но работало, и как бы я ни был счастлив, я обнаружил, что это нестабильное решение, и некоторые из моих запросов, которые я применяю далее ИНОГДА не удается .. да иногда! Как я сказал себе, я не собираюсь углубляться в эту дыру Django ORM magi c Я попытался построить запрос с помощью Q. Я получил следующий код
pckgs_query = reduce(
operator.and_,
(
Q(packages__name=name, packages__version__in=versions)
for name, versions in pckgs_dict.items()
)
)
hosts = Host.objects.filter(pckgs_query)
, но, к сожалению это не работает должным образом, так как я проверил генерируемый им запрос SQL, я уверен, что он ищет единственный объект PACKAGE со всеми этими параметрами, который, конечно, не существует ... Есть ли кто-то достаточно опытный, чтобы дать мне рука? Я действительно потерялся здесь и хотел бы, чтобы моего приложения не было в django прямо сейчас tbh
Спасибо!