filter und related für Dummies
Verfasst: Samstag 20. Januar 2024, 16:15
Also ganz habe ich das immer noch nicht kapiert und muss immer wieder rumprobieren - manchmal klappt das - meistens erstmal nicht.
Also ein Beispiel:
In meinen "Protokoll"en steht ein "user"
... da habe ich " related_name='protokolle'" eingetragen - weiß aber ehrlich gesagt nicht warum.
Dieser user ist ein OneToOne Relation zu "Profil":
Mir ist es gelungen ein Queyset (heißt das so?) zu erzeugen und erstmal alle Einträge von Usern ohne Lerngruppe herauszufiltern:
mir ist es sogar gelungen, diejenigen auszuschließen, die ich in die Admingruppe "Lehrer" aufgenommen habe:
Die Lehrer/innen sollen bei der Anmeldung als Klassenbezeichnung zunächst "Lehrer" eintragen - diejenigen möchte ich auch rausfiltern (ob das jetzt sinnvoll ist oder nicht)
- das gelingt aber nicht - die werden immer noch angezeigt.
Könnt ihr mir an diesem Beispiel bitte zunächst erklären, was da falsch ist, aber auch wofür (oder wie) ich dieses "related_name" benutze ... und dann habe ich das immer noch nicht verstanden, wo ich diesen doppelten Unterstrich benutze - manchmal scheint ja auch nur einer benötigt zu werden (oder sind das immer Benennungen?).
Bitte für Dummies - an der Dokumentation habe ich mich schon versucht.
Also ein Beispiel:
In meinen "Protokoll"en steht ein "user"
Code: Alles auswählen
class Protokoll(models.Model):
user = models.ForeignKey(Profil, verbose_name='Benutzer', related_name='protokolle', on_delete=models.CASCADE)
..
Dieser user ist ein OneToOne Relation zu "Profil":
Code: Alles auswählen
class Profil(models.Model):
user = models.OneToOneField(User, related_name='profil', on_delete=models.CASCADE )
nachname = models.CharField(max_length=30)
vorname = models.CharField(max_length=30)
klasse = models.CharField(max_length=10)
schule = models.ForeignKey(Schule, related_name='schule1', null= True, blank=True, on_delete = models.SET_NULL)
lerngruppe = models.ForeignKey(Lerngruppe, null= True, blank=True, on_delete = models.SET_NULL, related_name='gruppe')
...
Code: Alles auswählen
protokoll = Protokoll.objects.filter(user__lerngruppe = None)
Code: Alles auswählen
protokoll = protokoll.filter(~Q(user__user__groups__name = 'Lehrer'))
Code: Alles auswählen
protokoll = protokoll.filter(~Q(user__klasse = "lehrer"))
Könnt ihr mir an diesem Beispiel bitte zunächst erklären, was da falsch ist, aber auch wofür (oder wie) ich dieses "related_name" benutze ... und dann habe ich das immer noch nicht verstanden, wo ich diesen doppelten Unterstrich benutze - manchmal scheint ja auch nur einer benötigt zu werden (oder sind das immer Benennungen?).
Bitte für Dummies - an der Dokumentation habe ich mich schon versucht.