【问题标题】:Django ORM specifc queryDjango ORM 特定查询
【发布时间】:2020-04-16 00:29:10
【问题描述】:

我有 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 个的所有用户。我可以用一个查询来做吗?如何做?

【问题讨论】:

    标签: python django database django-models django-orm


    【解决方案1】:

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

    from django.db.models import Count
    
    TelegramUser.objects.annotate(
        nduty=Count('dutydate')
    ).filter(
        nduty__lt=3
    )

    这里的__lt lookup [Django-doc] 过滤器使得nduty (严格)小于3。如果您想保留具有三个相关DutyDates 的TelegramUsers,您可以使用__lte lookup [Django-doc]

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 2014-06-13
      • 2021-07-25
      • 1970-01-01
      • 2011-06-15
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多