Как динамически вычислить поле с помощью функции и упорядочить по этому вычисленному полю?

Контекст следующий: У меня есть модель продуктов. И мне нужно сделать набор запросов на продукты, вычисляя новое поле 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

Есть ли другой способ сделать это? Есть ли у вас идеи, как этого добиться?

Вернуться на верх