【问题标题】:Django query get all A records with B recordsDjango查询获取所有A记录和B记录
【发布时间】:2020-07-07 17:14:15
【问题描述】:

我的 Django 项目有一个多对多的关系 Doctor -- Speciality 我正在尝试仅列出具有医生记录的专科,以允许用户请求预约。

我现在有这个

context['specialities'] = [s for s in Speciality.objects.all() if s.doctor_set.all()]

但这不是一个优雅的解决方案。我只想列出具有活跃 (is_active=True) 医生的专业。

如何添加 is_active 过滤器?

更新! 在这里。

[s for s in Speciality.objects.all() if s.doctor_set.filter(is_active=True)]

它有效,但它仍然是一个不优雅的解决方案。有什么好的查询可以解决这个问题吗?

更新! 在这里。型号。

class Speciality(models.Model):
  name = models.CharField(max_length=64)
class Doctor(models.Model):
  name = models.CharField(max_length=64)
  specialities = models.ManyToManyField(Speciality)
  is_active = models.BooleanField(default=True)

【问题讨论】:

  • 你能给我们看看你的模型吗?
  • @ArakkalAbu 完成

标签: django orm many-to-many


【解决方案1】:

简单地说,

speciality_qs = Speciality.objects.filter(doctor__is_active=True).distinct()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2020-02-23
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多