... und dann wollte ich Euch mal wieder um Hilfe bitten (Ich habe in der Zwischenzeit aber auch einiges selbst hinbekommen!).
Also:
Meine User, Schüler(innen) und Lehrer(innen) melden sich an, ihre Daten (Name, Klasse, Jahrgang, Schulort, Schule usw. werden in einer Tabelle "Profil" gespeichert (OneToOne Beziehung zu "User"). Lehrer schicken mir eine E-Mail und werden in die Benutzergruppe "Lehrer" üernommen. Die Lehrerinnen und Lehrer können dann Lerngruppen erstellen und die Schülerinnen und Schüler können diese dann suchen und sich für diese anmelden. Die Kursleiter können dann (in Bälde) die Arbeitsergebnisse ihrer Schülerinnen und Schüler einsehen.
Schulorte und Schulen werden von mir jeweils in einer Tabelle angelegt. Die Schülerinnen und Schüler können jetzt, wie von @whitie vorgeschlagen, sich von Template zu Template klicken und dabei über den Schulort, die Schule und ihere Lehrkraft deren Lerngruppen anzeigen lassen.
Zwei Dinge funktionieren noch nicht.
1. Es werden nach Auswahl der Schule alle angemeldeten Lehrer angezeigt- und nicht nur die an der entsprechenden Schule. Da bekomme ich den Filter für "user.profil.schule=schule_wahl" nicht hin. Nach Auswahl des Schulortes klappt das, es werden nur die Schulen am entsprechenden Ort angezeigt, da hat mir @sirius3 weitergeholfen! Da aber die Schule nicht in "User" sondern in "Profil" steht, bekomme ich das nicht hin.
und 2. Die Schülerinnen und Schüler bekommen jetzt den Usernamen angezeigt und nicht den Namen aus dem Profil. Das geht doch sicher auch anders ... wenn man weiß wie.
view:
Code: Alles auswählen
def schule_wahl(req):
if req.method == 'POST':
schule_form = Schule_Form(req.POST)
if schule_form.is_valid():
schule_wahl = schule_form.cleaned_data['schule']
user = Profil.objects.get(user = req.user)
user.schule = schule_wahl
user.save()
if user.klasse.lower() == "lehrer":
return render(req, 'wahl_fertig.html', context={'schule': schule_wahl})
else:
if schule_wahl == None:
return render(req, 'wahl_fertig.html', context={'user': user})
lehrer_form = Lehrer_Form()
return render(req, 'schueler/lehrer_wahl.html', context={'lehrer': lehrer_form, 'schule': schule_wahl, 'titel': "Lehrer wählen"})
schule_form = Schule_Form()
return render(req, 'schule_wahl.html', context={'schule': schule_form, 'titel': "Schule wählen"})
def lehrer_wahl(req):
if req.method == 'POST':
lehrer_form = Lehrer_Form(req.POST)
if lehrer_form.is_valid():
lehrer_wahl = lehrer_form.cleaned_data['lehrer']
if lehrer_wahl == None:
return render(req, 'wahl_fertig.html', context={'user': req.user})
gruppe_form = Gruppe_Form(req.POST)
gruppe_form.fields['gruppe'].queryset=Lerngruppe.objects.filter(lehrer=lehrer_wahl)
return render(req, 'schueler/gruppe_wahl.html', context={'gruppe':gruppe_form, 'titel': "Lerngruppe wählen"})
lehrer_form = Lehrer_Form()
return render(req, 'schueler/lehrer_wahl.html', context={'lehrer':lehrer_form, 'titel': "Lehrer wählen"})
def gruppe_wahl(req):
if req.method == 'POST':
schueler=Profil.objects.get(user=req.user)
gruppe_form = Gruppe_Form(req.POST)
if gruppe_form.is_valid():
gruppe_wahl = gruppe_form.cleaned_data['gruppe']
if gruppe_wahl == None:
return render(req, 'wahl_fertig.html', context={'user': req.user})
schueler.lerngruppe=gruppe_wahl
schueler.save()
return render(req, 'schueler/gruppe_fertig.html', context={'gruppe':gruppe_wahl, 'titel': "fertig!"})
gruppe_form = Schule_Form()
return render(req, 'schueler/gruppe_wahl.html', context={'gruppe':gruppe_form, 'titel': "Lerngruppe_wählen"})
Code: Alles auswählen
class Schule_Form(forms.Form):
schule = forms.ModelChoiceField(queryset=Schule.objects.all().order_by('schulname'), widget=forms.Select, required=False)
class Lehrer_Form(forms.Form):
lehrer = forms.ModelChoiceField(label="Lehrer/in", queryset=User.objects.all().filter(groups__name="Lehrer"), widget=forms.Select, required=False)
class Gruppe_Form(forms.Form):
gruppe = forms.ModelChoiceField(label="meine Lerngruppe", queryset=Lerngruppe.objects.all(), widget=forms.Select, required=False)
Code: Alles auswählen
class Lerngruppe(models.Model):
lehrer = models.ForeignKey(User, null=True, on_delete=models.CASCADE, related_name='gruppe')
name = models.CharField(max_length=10)
class Meta:
verbose_name_plural = 'Lerngruppen'
def __str__(self):
return f"({self.name}, {self.lehrer})"
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)
# diese Felder werden erst ausgefüllt, wenn ein Schüler seine Lerngruppe wählt
ort = models.ForeignKey(Ort, null=True, blank=True, on_delete = models.SET_NULL)
schule = models.ForeignKey(Schule, null=True, blank=True, on_delete = models.SET_NULL)
lerngruppe = models.ForeignKey(Lerngruppe, null=True, blank=True, on_delete = models.SET_NULL)
...
schule_wahl.html:
Code: Alles auswählen
<body>
<p>Hier sind die Schulen in {{ort.name}}, die für den Rechentrainer angemeldet sind:</p>
<form action="/schule_wahl/" method="POST">
{% csrf_token %}
{{schule}}
<button type="submit">auswählen</button>
</form>
<p>Auch hier gilt: Wenn deine Schule oben nicht dabei ist, muss die Schule neu angelegt werden.</p>
</body>
Code: Alles auswählen
<body>
<p>Das sind die Lehrerinnen und Lehrer, die an der <b>{{schule.schulname}}</b> mit dem Rechentrainer arbeiten:</p>
<form action="/lehrer_wahl/" method="POST">
{% csrf_token %}
{{lehrer}}
<button type="submit">auswählen</button>
</form>
</body>
Code: Alles auswählen
<body>
<p>Jetzt musst du nur noch deine Lerngruppe bei {{lehrer.vorname}} {{lehrer.nachname}} auswählen:
<form action="/gruppe_wahl/" method="POST">
{% csrf_token %}
{{gruppe}}
<button type="submit">auswählen</button>
</form>
</body>