我有2个Django模型:
class TelegramUser(models.Model):
telegram_id = models.IntegerField()
telegram_username = models.TextField(max_length=255, default=None, blank=True, null=True)
first_name = models.TextField(max_length=255, default=None, blank=True, null=True)
last_name = models.TextField(max_length=255, default=None, blank=True, null=True)
has_blocked = models.BooleanField(default=False)
class DutyDate(models.Model):
date = models.DateField(default=None, blank=True, null=True)
telegram_user = models.ForeignKey(TelegramUser, on_delete=models.SET_NULL, null=True)
group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, null=True)
mark = models.FloatField(max_length=255, default=0)
is_open = models.BooleanField(default=True)
我需要获取分配少于3个DutyDate的所有用户。我可以通过一个查询来做到这一点吗?
是。我们首先计算相关DutyDate
的数量,然后根据该数量进行过滤:
from django.db.models import Count
TelegramUser.objects.annotate(
nduty=Count('dutydate')
).filter(
nduty__lt=3
)