Fehler in modeldefinition abfangen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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)?.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

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

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Antworten