У меня есть 2 модели Puzzle and Play. для каждой игры у меня есть рейтинг. Я бы хотел добавить в набор запросов Puzzle значение медианы для всех соответствующих игр.
class Puzzle(models.Model):
name = models.CharField(max_length=255)
class Play(models.Model):
puzzle = models.ForeignKey(Puzzle, on_delete=models.CASCADE,related_name='plays')
rating = models.IntegerField(default=-1)
puzzle_completed = models.BooleanField(default=None, blank=False, null=False)
Я знаю, как считать:
Puzzle.objects.annotate(nb_sucesses=Count('plays', filter = Q(plays__puzzle_completed=True), distinct = True),)
, и я ожидал получить медиану в похожим образом:
Puzzle.objects.annotate(rating_median=Median('plays__rating', filter = Q(plays__puzzle_completed=True), distinct = True),)
однако, по-видимому, из-за моей Django базы данных среды разработки ( sqlite ) я не могу этого сделать.
От что я извлек из следующей информации https://mariadb.com/kb/en/median/, в моей производственной среде ( MariaDB ) этот подход должен работать (но я его еще не проверял)
Мое текущее понимание (основанное на различных поисках inte rnet) заключается в том, что я должен иметь возможность использовать функцию Django Fun c () для использования пользовательской медианной функции ( по этой модели? ) это может вызвать либо Median, если он находится в работе, либо более сложный необработанный запрос sql, если он находится в разработке (основано на этом? или на этом? ).
Но через несколько часов я должен признать, что я здесь вне своей глубины.
Ульд, пожалуйста, помогите мне соединить точки?