Die Schülerinnen und Schüler können sich anmelden, die Lehrerinnen und Lehrer auch und die Schülerinnen und Schüler können sich jetzt einer Lerngruppe zuordnen und die entsprechende Lernkraft soll jetzt die Arbeitergebnisse der Gruppenmitglieder einsehen können.
Bei meinem bestehenden Rechentrainer (auf OpenOffice Basis) sieht das etwa so aus:

Das entsprechende Template habe ich schon angefangen, das sieht bisher so aus:

Man kann erkennen, dass drei Schüler in der Gruppe angemeldet sind, einer hat noch keine Aufgaben erledigt.
Was jetzt geändert werden müsste ist, dass die Aufgaben jedes Schülers in einer Reihe angezeigt werden und die jeweiligen Aufgaben in der entsprechenden Spalte. Die 10 Aufgaben zum Thema "Ergänzen" von Franz müssten also in die Spalte "Ergänzen", die 20 zu "Subtrahieren" - zum Thema "Addieren" hat Fritz keine Aufgaben gemacht, diese Spalte muss also leer bleiben..
Zur Organisation muss man wissen, dass, jedesmal, wenn ein User eine Themengruppe neu anfängt, eine Instanz im model "Zaehler" erzeugt wird. Franz hat dementsprechend 2 Instanzen, Hans eine und Horst noch gar keine.
Wie seht ihr das, ist das überhaupt zu realisieren? Meine Fähigkeit in komplexeren Zusammenhängen zu denken ist hier wieder mal begrenzt.
Was braucht ihr von meinem Code?
template
Code: Alles auswählen
<body>
<h4>Angemeldet in der Lerngruppe {{gruppe.name}} sind:</h4>
<table>
{% for s in schueler %}
<tr><td>{{s.vorname}} {{s.nachname}}, {{s.klasse}}</td><td>{{s.katmax}}</td></tr>
{% endfor %}
</table>
<table>
<thead>
<tr>
<th>Name</th>
<th>Summe</th>
{%for kategorie in kategorien %}
<th style="transform: rotate(270deg)">{{kategorie.zeile}}: {{kategorie.name}}</th>
{%endfor%}
</tr>
</thead>
<tbody>
{% for zahl in zaehler %}
<tr><td>{{zahl.user.vorname}} {{zahl.user.nachname}}, {{zahl.user.klasse}}</td><td></td><td>{{zahl.kategorie.zeile}}: {{zahl.kategorie.name}}</td><td>{{zahl.richtig|floatformat}}</td></tr>
{% empty %}
<strong>Es sind noch keine Schüler angemeldet.</strong>
{% endfor %}
</tbody>
</table>
</body>
Code: Alles auswählen
def gruppe_uebersicht(req, gruppe_id):
gruppe = Lerngruppe.objects.get(pk=gruppe_id)
kategorien = Kategorie.objects.all()
schueler = Profil.objects.filter(lerngruppe__name=gruppe.name)
zaehler = Zaehler.objects.filter(user__lerngruppe=gruppe)
context={'kategorien': kategorien, 'zaehler': zaehler, 'gruppe': gruppe, 'schueler': schueler, 'titel': str(gruppe.name)+", " +str(gruppe.lehrer.profil.vorname)+" " +str(gruppe.lehrer.profil.nachname)}
return render(req, 'lehrer/gruppe_uebersicht.html', context)
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=15)
...
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
...
lerngruppe = models.ForeignKey(Lerngruppe, null= True, on_delete = models.SET_NULL, related_name='gruppe')
katmax = models.IntegerField(default=0) # die Zeilennummer die höchsten gewählten Aufgabenkategorie
...
class Zaehler(models.Model):
user = models.ForeignKey(Profil, verbose_name='Benutzer', related_name='zaehler', on_delete=models.CASCADE)
kategorie = models.ForeignKey(Kategorie, on_delete=models.CASCADE, related_name="zaehler")
...
richtig = models.DecimalField(max_digits=6, decimal_places=1, default=0)
bearbeitungszeit = models.FloatField(default=0)
falsch = models.PositiveSmallIntegerField(default=0)
...
... Und dann muss ich das ganze natürlich noch aufhübschen.
Wenn ihr Spezialisten mir wenigsten einen Hinweis geben könntet, ob das überhaupt zu realiseren ist, wäre ich euch schon dankbar.
So long