Как использовать функцию NTILE с другими филями в запросах Django?

У меня есть такие модели django, и мне нужно запросить имя и доход, разделенные на диапазоны, поэтому я использую ntile для этого:

class Bookings(models.Model):
    bookid = models.IntegerField(primary_key=True)
    facid = models.ForeignKey('Facilities', models.DO_NOTHING, db_column='facid')
    memid = models.ForeignKey('Members', models.DO_NOTHING, db_column='memid')
    starttime = models.DateTimeField()
    slots = models.IntegerField()


class Facilities(models.Model):
    facid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100)
    membercost = models.DecimalField(max_digits=65535, decimal_places=65535)
    guestcost = models.DecimalField(max_digits=65535, decimal_places=65535)

# Here I need to query name and revenue divided by ranges
total = Sum(
    Case(
        When(
            Q(bookings__memid=0),
            then=F('guestcost') * F('bookings__slots')
        ),
        default=ExpressionWrapper(
            F('membercost') * F('bookings__slots'),
            output_field=DecimalField()
        )
    )
)
    
result = Facilities.objects.all().annotate(
    revenue=Window(
        expression=Ntile(num_buckets=3),
        order_by=total
    ),
).values('name', 'revenue')

Здесь у меня ошибка, что "facilities.facid" не находится в группе by, потому что Django строит такой SQL:

SELECT "facilities"."facid", "facilities"."name", "facilities"."membercost",
 "facilities"."guestcost", "facilities"."initialoutlay", 
"facilities"."monthlymaintenance", NTILE(3) OVER (ORDER BY SUM(CASE WHEN 
"bookings"."memid" = 0 THEN ("facilities"."guestcost" * "bookings"."slots") ELSE 
("facilities"."membercost" * "bookings"."slots") END)) AS "revenue" FROM "facilities" 
LEFT OUTER JOIN "bookings" ON ("facilities"."facid" = "bookings"."facid")

Как заставить Django использовать имя в группе по?

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