Django: FOREIGN KEY constraint failed

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

Dienstag 10. Juli 2018, 18:45

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 ?
Benutzeravatar
__blackjack__
User
Beiträge: 1460
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 10. Juli 2018, 18:58

Wenn der Defaultwert NULL sein kann, dann solltest Du da auch NULL angeben, also `None` in Python.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Septias
User
Beiträge: 73
Registriert: Freitag 24. Juni 2016, 19:15

Dienstag 10. Juli 2018, 20:06

Stimmt schon, aber am liebsten hätte ich immer noch 'Kein Team' oder sowas als default...
Aber danke :-)
Septias
User
Beiträge: 73
Registriert: Freitag 24. Juni 2016, 19:15

Dienstag 10. Juli 2018, 20:09

Okay.. ich hätte es echt nicht erwartet, avber '0' mit 'None' austauschen hat es echt gebracht xD Danke ^^
Antworten