Django ORM 特定查询

Django ORM specifc query

我有 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)

我需要获取分配的 DutyDates 少于 3 个的所有用户。我可以用一个查询来完成吗?如何做?

。我们首先计算相关 DutyDate 的数量,然后根据该计数进行过滤:

from django.db.models import <b>Count</b>

TelegramUser.objects.annotate(
    <b>nduty=Count('dutydate')</b>
).filter(
    <b>nduty__lt=3</b>
)

这里是__lt lookup [Django-doc] filters such that nduty is (strictly) less than 3. If you want to retain TelegramUsers that have three related DutyDates as well, you can use the __lte lookup [Django-doc].