Использование функции difference() в модели Django с последующим созданием агрегатной аннотации
У меня есть приложение Django, которое импортирует данные из стороннего источника и позволяет мне сопоставлять их со стандартизированными наборами данных с помощью таблицы перевода. Таблица перевода принимает два значения из исходных данных (производитель и модель) и возвращает идентификатор модели, соответствующий модели в стандартизированных данных. Причина создания таблицы перевода заключается в том, что описание модели в исходных данных не является на 100% последовательным, поэтому мне может понадобиться сопоставить 2 или 3 номера модели в исходных данных с одним номером модели в стандартизированной таблице моделей.
У меня есть интерфейс, который предоставляет мне модели в исходных данных, которые не были сопоставлены с моделью в стандартизированных данных. В настоящее время я не использую поле внешнего ключа в модели Django, поэтому для получения списка в шаблоне я делаю следующее
mkt = MarketData.objects.all()
mapped_mdls = MktModel.objects.all().values('mfr','mdl')
mdl = mkt.values('equip_mfr','equip_model').distinct() \
.annotate(mfr=F('equip_mfr'),mdl=F('equip_model')).values('mfr','mdl').difference(mapped_mdls) \
.order_by('mfr','mdl')
Цепочка values...annotate...values заключается в изменении имен полей в исходных данных, чтобы они соответствовали таблице поиска.
Я пытаюсь добавить общее количество единиц, представленных в комбо-файле "производитель/модель", которое содержится в поле под названием "единицы". Обычно я добавляю что-то вроде .annotate(total_units=Sum("units"))
, но если я включаю это после разницы, то получаю ошибку, потому что (очевидно) нельзя делать аннотацию после разницы, и я получаю ошибку, если включаю это перед разницей, потому что это означает, что количество полей в сравниваемых наборах не совпадает.
Есть предложения?