Mój projekt Django ma wiele do wielu relacji Doctor - Speciality Próbuję wymienić tylko specjały z rekordami lekarza, aby umożliwić użytkownikom wymagać spotkania.

Właśnie teraz to mam

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

Ale to nie jest eleganckie rozwiązanie. Chcę wymienić tylko specjały z aktywnymi (is_active = true) lekarzy.

Jak mogę dodać filtr IS_Activact?

Aktualizacja! Op tutaj.

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

Działa, ale nadal jest niesamowite rozwiązanie. Wszelkie miłe zapytanie, które rozwiązywał problem?

Zaktualizowany! Op tutaj. Model.

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)
0
cristhiam 27 marzec 2020, 02:54

1 odpowiedź

Najlepsza odpowiedź

Po prostu,

speciality_qs = Speciality.objects.filter(doctor__is_active=True).distinct()
1
JPG 27 marzec 2020, 04:25