Как динамически вычислить поле с помощью функции и упорядочить по этому вычисленному полю?
Контекст следующий: У меня есть модель продуктов. И мне нужно сделать набор запросов на продукты, вычисляя новое поле compatibility
, которого нет в модели, потому что мне нужно динамически вычислить его на основе пользователя, который делает запрос, и, наконец, мне нужно упорядочить набор запросов на основе этого нового поля
Я пытался сделать что-то подобное, используя annotate, но поскольку логика вычисления совместимости довольно сложная и для этого мне нужно знать некоторые m2m текущего продукта, я не могу вызвать функцию внутри Value
.
qs = Product.objects.all().annotate(compatibility=Value(my_func_to_calc_compatibility(), output_field=FloatField())).order_by('compatibility')
class Product(models.Model):
*some other fields*
diagnosis = models.ManyToManyField(Diagnosis, blank=True)
В модели Diagnosis есть только некоторые CharFields
Есть ли другой способ сделать это? Есть ли у вас идеи, как этого добиться?