Ich erweitere Django (v1.9) integrierte Benutzermodell mit Player-Klasse, um einige zusätzliche Eigenschaften hinzuzufügen.Erweitern Django Benutzermodell - Populationsfehler
class Player(models.Model):
TIMEZONES=()
user = models.OneToOneField(User, on_delete=models.CASCADE)
... (player-specific properties here)
time_zone = models.CharField(max_length=255, choices=PRETTY_TIMEZONE_CHOICES, blank=True, null=True,)
Wenn Benutzer von Django Admin-Panel zu schaffen, ich brauche nicht immer Spieler zu schaffen, so dass manchmal nur Benutzer erstellt werden. Daher stimmen die Player- und Benutzer-IDs nicht genau überein. Es stellte sich heraus, dass dies zu einem Problem führt, wenn ModelForms von Modellen, die verknüpft sind Spieler, wie diese bevölkern:
class City(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
name = models.CharField(max_length = 100)
x_coord = models.SmallIntegerField()
y_coord = models.SmallIntegerField()
region = models.CharField(max_length = 100)
def __unicode__(self):
return str(self.player) + "-" + str(self.name)
class Meta:
db_table = 'cities'
class CityForm(ModelForm):
class Meta:
model = City
fields = (
'name',
'player',
'x_coord',
'y_coord',
'region')
Diese Modelform verwendet wird, wenn die Schaffung einer neuen Stadt. Wenn die Benutzer-ID und die Spieler-ID übereinstimmen, gibt es kein Problem, die Spieler-ID wird in das Formular eingetragen und die Stadt wird erfolgreich erstellt. Wenn die Benutzer-ID und die Player-ID unterschiedlich sind, wird die Player-ID im Formular nicht ausgefüllt, das Formular wird nicht validiert und die Erstellung der Städte schlägt fehl.
Ich habe kein Problem bekommt Spielernummer von request.user, und ich konnte die Spieler-ID, bevor die Validierung nach dem Aufstehen POST-Daten reparieren. Ich habe auch einen Post-Speicher-Hook hinzugefügt, so dass Player immer erstellt wird, so dass die IDs immer übereinstimmen. Aber es scheint, dass Formular mit Spieler-ID an erster Stelle gefüllt werden sollte, da Benutzerdaten zugänglich sind und es eine Eins-zu-eins-Beziehung ist.
Was fehlt mir hier?
ich irgendwelche Annahmen über IDs nicht machen war, ganz im Gegenteil, ich war es für selbstverständlich, dass die Spieler-ID würde in der Modelform korrekt ausgefüllt werden. Das Problem besteht nicht in mehreren Stadt-IDs, sondern in folgendem: Wenn der Benutzer eine neue Stadt erstellt, wird die Spieler-ID des Nutzers nicht in das Stadterstellungsformular eingetragen. – seadeer
Ahh ich sehe, Sie haben versucht, das Problem zu umgehen, werde ich meine Antwort –
Ok, so habe ich meine Antwort geändert, hoffentlich ist dies hilfreich. Wenn du es immer noch nicht verstehst, kann ich versuchen es zu klären. –