Seite 1 von 1

Fehler in modeldefinition abfangen

Verfasst: Sonntag 15. Oktober 2023, 09:25
von Pitwheazle
Ich habe schon wieder was Neues:
Lehrer können Lerngruppen anlegen:

Code: Alles auswählen

def neue_gruppe(req):
    if User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists():
        gruppe_form = Gruppe_Neu_Form() 
        if req.method == 'POST':
            gruppe_form = Gruppe_Neu_Form(req.POST) 
            if  gruppe_form.is_valid():
                gruppen = Lerngruppe.objects.filter(lehrer=req.user).order_by('name')
                try:
                    gruppe = Lerngruppe.objects.create()
                    gruppe.name = gruppe_form.cleaned_data['name']
                    gruppe.lehrer = req.user
                    gruppe.save()
                except:
                    gruppe_form = Gruppe_Neu_Form(req.POST) 
                    return render(req, 'lehrer/neue_gruppe.html', context={'gruppe': gruppe_form, 'titel': "Ein Gruppe mit diesem Name existiert schon!",})                 
                return render(req, 'lehrer/meine_gruppen.html', context={'gruppen': gruppen, 'titel': "neue Lerngruppe wurde angelegt"}) 
        return render(req, 'lehrer/neue_gruppe.html', context={'gruppe': gruppe_form, 'titel': "neue Lerngruppe anlegen",})
    else:
        return HttpResponse("Zugriff verweigert")
Einem Kollegen ist es wohl gelungen, eine ungültige(?) Lerngruppe anzulegen. Eine wird mir im Admintool als "None" angezeigt. Daher ergibt sich in models.py hier ein Fehler:

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 Meta:
        verbose_name_plural = 'Lerngruppen'
        unique_together = ['lehrer', 'name']
    
    def __str__(self):
        return f"{self.lehrer.profil.nachname}, {self.name}"
... da diese Lerngruppe kein "profil" hat. Wie kann ich das abfangen?

Re: Fehler in modeldefinition abfangen

Verfasst: Sonntag 15. Oktober 2023, 09:41
von Sirius3
Also entweder braucht eine Lerngruppe einen Lehrer oder nicht. Also entweder darf null=True nicht sein, oder du musst an allen Stellen auch damit zurecht kommen, an denen Du auf lehrer zugreifen.

Re: Fehler in modeldefinition abfangen

Verfasst: Dienstag 17. Oktober 2023, 16:02
von Pitwheazle
Zu blöd, keine Ahnung warum ich "null=True" eingesetzt habe - macht wohl keinen Sinn. Aber kann das auch der Grund sein, dass mir ein Eintrag mit None angezeigt wird (wurde)?.

Re: Fehler in modeldefinition abfangen

Verfasst: Dienstag 17. Oktober 2023, 16:46
von noisefloor
Hallo,

`None` heißt, das das nix ist. In SQL wäre das in der Tat Null.

Gruß, noisefloor

Re: Fehler in modeldefinition abfangen

Verfasst: Dienstag 17. Oktober 2023, 17:32
von Pitwheazle
Heißt das ja oder nein? Also kann, dadurch, dass bei der Erzeugung, wie auch immer, keine Lehrkraft eingetragen wurde, ein "Null"-Objekt angelegt worden sein oder muss ich den Fehler woanders suchen. Mein Code, mit dem eine Lerngruppe angelegt wird, steht ja oben und ich hätte angenommen, dass mit diesem keine Lerngruppe ohne Lehrer erzeugt werden kann - auch wenn es im model nicht explizit verboten ist.

Re: Fehler in modeldefinition abfangen

Verfasst: Dienstag 17. Oktober 2023, 19:08
von noisefloor
Hallo,

es heißt ja. Könnte es vielleicht sein, dass es einen leeres Lehrer-Objekt gibt? Ansonsten weiß ich nicht, wie sich Django bei den Auswahlfeldern verhält, wenn das Feld ein Fremdschlüssel ist aber null sein darf. Theoretisch könnte das gleichbedeutend sein mit "da ist ein Auswahlfeld, aber nix auswählen ist auch ok".

Gruß, noisefloor