Django запрос получить все записи A с записями B - PullRequest
0 голосов
/ 27 марта 2020

Мой 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)

1 Ответ

1 голос
/ 27 марта 2020

Просто,

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