Django: FOREIGN KEY constraint failed

Django, Flask, Bottle, WSGI, CGI…
Antworten
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Ich habe eine Model (CTFTeam), was den User erweiter:

Code: Alles auswählen

class BaseProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    class Meta:
        abstract = True

    def __str__(self):
        return self.user.username


class BaseSportartProfile(BaseProfile):
    team = models.ForeignKey(Team, on_delete=models.CASCADE, blank=True, null=True, default='0')  
    # Ich habe default auf 0 gesetzt, weil ich sonst 'invalid literal for int() with base 10' als Fehler bekommen habe. Weiß
    # jemand, wie ich das fixen kann ? Habe auch die DB neu erstellt, weil ich dachte, dass das Feld zuerst als int erstellt wurde, aber daran lag es nicht.
    class Meta:
        abstract = True


class CTFProfile(BaseSportartProfile):
    alter = models.CharField(max_length=20)

Dieses Profiel hat den Foreign Key 'team', der auch NULL sein kann, da man nicht direkt ein Team bei Initialisierung des Profils haben kann, sondern sich dann halt später eins aussucht oder erstellt.

Wenn ich jetzt ein Benutzer erstelle, bekomme ich die Fehlermeldung: FOREIGN KEY constraint failed.
Wie kann ich das beheben ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn der Defaultwert NULL sein kann, dann solltest Du da auch NULL angeben, also `None` in Python.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Stimmt schon, aber am liebsten hätte ich immer noch 'Kein Team' oder sowas als default...
Aber danke :-)
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Okay.. ich hätte es echt nicht erwartet, avber '0' mit 'None' austauschen hat es echt gebracht xD Danke ^^
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Antworten