ОШИБКА: Должен присутствовать в предложении 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