我有兩個類 - Arzt和Fachbereich - 通過ArztFachbereich通過ManyToMany關係相關。通過特定的ManyToMany對象來訂購Django QuerySet
class Fachbereich(FachbereichUndArztFachbereiche):
name = models.CharField(unique=True, max_length=100)
class Arzt(models.Model):
name = models.CharField(max_length=500)
fachbereich = models.ManyToManyField(Fachbereich, through="ArztFachbereich")
class ArztFachbereich(FachbereichUndArztFachbereiche):
arzt = models.ForeignKey(Arzt)
fachbereich = models.ForeignKey(Fachbereich)
note = models.FloatField()
我知道如何才能得到由Arzt的最小音符排序的結果。
Arzt.objects.annotate(best_note=Min("arztfachbereich__note")).order_by("best_note")
但接下來我先用Fachbereich-ID(fb_id)過濾Arzt。而現在我不需要最小的音符或聚合的東西,但這個具體的ArztFachbereich的說明。
澄清我在說什麼: 這樣的事情......但我不知道如何在django中做到這一點。
aerzte = Arzt.objects.filter(fachbereich=fb_id)
aerzte.order_by("arztfachbereich__note"
WHERE arztfachbereich__fachbereich ==
Fachbereich.objects.get(id=fb_id))
或者另一種方式我想過:
aerzte = Arzt.objects.filter(fachbereich=fb_id)
aerzte.annotate(specific=ArztFachbereich.objects.get(arzt=self, fachbereich__id=fb_id)
aerzte.order_by("specific")
但我顯然不能訪問arzt機智的自我聲明...
似乎工作......但我不明白爲什麼^^我正在過濾Arzt,但可以訪問特定ArztFachbereich對象的arztfachbereich__note ...? – Sehebo
@Sehebo:我更新了答案,試圖使其更加清晰。 –