首页 > 解决方案 > Django查询获取所有A记录和B记录

问题描述

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

标签: djangoormmany-to-many

解决方案


简单地,

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

推荐阅读