Damit die Lehrerin/der Lehrer die Arbeit ihrer/seiner Schülerinnen und Schüler einsehen kann habe ich mir folgendes überlegt (das habe ich schon mal beschrieben):
- Es gibt jeweils eine Datenbank mit Orten und eine mit Schulnamen.
- Lehrer/innen werden ihren Schulen zugeordnet.
- Diese können für jede ihrer/seiner Lerngruppen Lerngruppen anlegen (also nur jeweils einen Gruppennamen festlegen).
- Die Schülerinnen und Schüler können aus einer Liste ihren Schulort (wenn vorhanden) aussuchen, anschließend ihre Schule, dann ihre/n Lehrer/in und zuletzt ihre Lerngruppe (deren Namen entweder selbsterklärend ist oder deren Namen sie von der Lehrkraft mitgeteilt bekommen).
- Eine derartige Lerngruppe finden sie natürlich nur, wenn diese auch von ihre/r/m Lehrer/in angelegt wurde.
- Wenn sie sich dort angemeldet haben, kann der/die Lehrer/in die Arbeitsergebnisse der Schülerinnen und Schüler ihrer/seiner Lerngruppe einsehen.
- Bisher habe ich in den Schülerdaten nur ein Feld für die Lerngruppe vorgesehen (ich bin nicht sicher, ob ich auch einen Link auf Schulort, Schule und Lehrer benötige).
- In meinem Template habe ich es bisher nur geschafft, dass die/der Schüler/in aus allen existierenden Lerngruppen wählen kann - das will ich so nicht. Irgendwann werden das (hoffentlich) zu viele Lerngruppen.
Ich habe folgendes überlegt:
Im Profil können sie zunächst in einer Liste nach ihrem Schulort suchen, wenn sie ihn finden bekommen sie eine Liste mit den dortigen Schulen, dann eine der Lehrereinnen und Lehrer dort und zuletzt deren Lerngruppen.
Ich vermute, ich benötige ein widget mit einem Auswahlfeld in das ich jeweils nacheinander den Inhalt der Orte, der Schule, der Lehrerinnen und Lehrer und zuletzt der Lerngruppen einlese. und erst, wenn sie dort "ihre" Lerngruppe finden, wird diese in Profil übernommen. Ich habe mich auch wieder fleißig daran versucht mithilfe der Docs das alleine hinzubekommen - das bekomme ich alleine nicht hin.
So sieht die angezeigte Seite zurzeit aus:

das template:
Code: Alles auswählen
<h2>Mein Profil:</h2>
<ul>
<li>user: {{user}}</li>
<li>{{nutzer.vorname}} {{nutzer.nachname}}</li>
<li>Klasse: {{nutzer.klasse}}
<form method="post" action="{% url 'aendern' %}">
{% csrf_token %}
{{ form.as_p }}
</li>
</ul>
<h3>Wähle aus:</h3>
<ul>
{% for o in ort %}
<li> {{ o.plz }} {{ o.name }} </li>
{% endfor %}
</ul>
Code: Alles auswählen
class Ort_Form(forms.Form):
class Meta:
model = Ort
fields = ('plz', 'name',)
class Schueler_Aendern_Form(forms.ModelForm):
class Meta:
model = Schueler
labels = {'klasse': ("ändern:")}
fields = ('klasse', 'lerngruppe')
Code: Alles auswählen
def aendern(req):
form = Schueler_Aendern_Form(req.POST)
ort = Ort.objects.all().order_by('plz')
if not User.objects.filter(pk=req.user.id, groups__name='Schüler').exists():
return redirect('lehrer')
nutzer = req.user.schueler
if req.method == 'POST':
if form.is_valid():
klasse = form.cleaned_data['klasse']
nutzer.klasse = klasse
nutzer.save()
form = Schueler_Aendern_Form(req.POST)
return render(req, 'aendern.html', {'nutzer': nutzer, 'form': form, 'ort': ort})
Die Schülerinnen und Schüler dürfen ihren Namen, ihren Jahrgang und ihrn Kurs nicht ändern, den Namen ihrer Klassse schon. Das habe ich, wie ihr erkennen könnt auch schon versucht einzubauen. Die Änderung klappt auch aber das sieht blöd aus. Einerseits macht der Hinweis "Dieses Feld ist zwingend erforderlich erforderlich" hier keinen Sinn, sie haben ja im Normalfall schon eine Klasse. Und dann fände ich das prima, wenn die derzeitige Klasse in dem Eingabefeld schon drinsteht und dann nur bei Bedarf geändert wird.