通过django orm计数(*)来制作组

bux*_*bux 3 django django-orm

使用以下型号:

class Day(models.Model):
    date = models.DateField(
        unique=True,
        null=False,
        blank=False,
    )


class Reservation(models.Model):
    user = models.ForeignKey(
        User,
        null=False,
        blank=False,
        related_name='reservations',
        verbose_name=_('Utilisateur'),
    )
    day = models.ForeignKey(
        Day,
        null=False,
        blank=False,
        related_name='reservations',
    )
Run Code Online (Sandbox Code Playgroud)

要获得预订数量低于或等于5的天数,我会:

SELECT day_id
FROM meal_reservation
GROUP BY day_id
HAVING count(*) <= 5
Run Code Online (Sandbox Code Playgroud)

但是如何使用Django ORM呢?

Tod*_*dor 10

阅读有关使用值+注释的组合的文档,这是您需要的:

Reservation.objects.values('day').annotate(cnt=models.Count('id')).filter(cnt__lte=5)
Run Code Online (Sandbox Code Playgroud)

  • 必须执行“from django.db.models import Count” (4认同)