ОШИБКА: Должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции "DJANGO".

Я получаю следующую ошибку с моим набором запросов:

django.db.utils.ProgrammingError: колонка "u0.color" должна присутствовать в предложении GROUP BY или использоваться в агрегатной функции LINE 1: .... "payment_amount"), 0)) AS "owed_amount", (SELECT U0. "color"...

>
<
class DebitFileScore(CustomModel):
    minimum_amount = models.PositiveIntegerField(verbose_name=_("Monto minimo"), help_text=_("Monto minimo para semaforo"),unique=True)
    color = models.CharField(max_length=8, verbose_name=_("Color asignado"), help_text=_("Color asignado para semaforo"))

class DebitFile(CustomModel):
    debit_file_section = models.ForeignKey(DebitFileSection, on_delete=models.PROTECT, related_name='debit_files', verbose_name=_("Departamento de expediente"), help_text=_("Referencia foranea al modelo 'DebitFileSection'"))
    debit_amount = models.FloatField(default=0, verbose_name=_("Monto de aduedo"))
    name = models.CharField(null=True, blank=True, max_length=100, verbose_name=_("Nombre del acredor"), help_text=_("Nombre del acredor"))
    comments = models.TextField(null=True, blank=True, verbose_name=_("Comentarios"), help_text=_("Comentarios libres"))
    cut_off_date = models.DateField(default=date.today,verbose_name=_("Fecha de Corte"))
    phone = models.CharField(null=True, blank=True, max_length=200, verbose_name=_("Teléfono"), help_text=_("Teléfono de acredor"))
    date = models.DateField(verbose_name=_("Fecha Registro"))
    timestamp = models.DateTimeField(auto_now=True)
    objects = querysets.DebitFileQueryset.as_manager()

class DebitFilePayment(CustomModel):
    debit_file = models.ForeignKey(DebitFile, on_delete=models.PROTECT, related_name='debit_file_payments', verbose_name=_("Operador"), help_text=_("Referencia foranea al modelo 'Operator'"))
    payment_amount = models.FloatField(default=0, verbose_name=_("Monto de aduedo"))
    comments = models.TextField(null=True, blank=True, verbose_name=_("Comentarios"), help_text=_("Comentarios libres"))
    date = models.DateField(verbose_name=_("Fecha Registro"))
    timestamp = models.DateTimeField(auto_now=True)
<
class DebitFileQueryset(models.QuerySet):

    def withPaymentsAmount(self):
        return self.annotate(
            owed_amount=models.F("debit_amount") - models.functions.Coalesce(models.Sum("debit_file_payments__payment_amount"),0),
        )

    def withScore(self):
        from GeneralApp.models import DebitFileScore
        score = DebitFileScore.objects.filter(minimum_amount__lte=models.OuterRef('owed_amount')).exclude(minimum_amount__gt=models.OuterRef('owed_amount'))
        return self.annotate(
            score_color=models.Subquery(score.order_by('minimum_amount','color').values('color')),
        ).order_by("score_color")
Вот кверисет, который я пытаюсь создать, именно метод withScore() не работает:

Я следовал примеру документации https://docs.djangoproject.com/en/4.1/ref/models/expressions/#subquery-expressions

Моя версия Django - 2.1.7

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