Versuchen, mit Django (von PHP oder .Net Vergangenheit) in den Griff zu bekommen und es ein wenig herausfordernd zu finden.Django mit UUID Primärschlüssel für den Zugriff auf verknüpfte Modelle
Wenn die folgenden Modelle erstellt hat:
class Member(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.last_name + ", " + self.first_name
class Organisation(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=140)
def __str__(self):
return self.name
class Membership(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
member_id = models.ForeignKey('Member', on_delete=models.DO_NOTHING)
organisation_id = models.ForeignKey('Organisation', on_delete=models.DO_NOTHING)
membership_no = models.CharField(max_length=20)
class Meta:
unique_together = (("organisation_id", "member_id"),
("organisation_id", "membership_no"))
def __str__(self):
mbr = Member.objects.get(pk=self.member_id)
org = Organisation.objects.get(pk=self.organisation_id)
return str(org) + ": " + str(mbr)
Das Problem tritt auf, wenn ich versuche, die Mitgliedschaft Modelle in Admin anzuzeigen/zu bearbeiten. Ich erhalte den Fehler: TypeError at/admin/Mitgliedschaft/Mitgliedschaft Ausnahmewert: 'Anderson, Roy' ist keine gültige UUID.
Ich verwende Django Version 1.10.3.
Jetzt ist die Zeichenfolge 'Anderson, Roy' zufällig einer der Datenbankeinträge für das Member-Modell und scheint den Wert auszuführen, der von der str-Funktion für das Member-Modell zurückgegeben wird. Ich weiß jedoch nicht, warum es versucht, es als UUID zu verwenden. Ich versuche, String-Werte aus den Member- und Organisationsmodellen zu verwenden, um den Rückgabewert (str-Funktion) für das Membership-Modell zu erstellen. Es scheint, dass es ein Problem in dieser Funktion gibt. Ist das
mbr = Member.objects.get(pk=self.member_id)
der richtige Weg, die Mitglied für eine bestimmte UUID abzurufen?
Jede Hilfe sehr geschätzt.
Dank
Wenn ich __str__ ändere, um self.id zurückzugeben, beschwert sich Admin für Mitgliedschaften, dass __str__ keine Zeichenfolge zurückgibt. Wenn ich es ändere, um str (self.id) zurückzugeben, beschwert es sich, dass der zurückgegebene Wert keine UUID ist. Scheint, ich kann nicht gewinnen! Übrigens sagt die gesamte Dokumentation, die ich gefunden habe, dass __str__ eine benutzerfreundliche Zeichenfolge zurückgeben sollte, die das Objekt nicht unbedingt die ID beschreibt. Danke für deine schnelle Antwort. – user917051
Sie sollten die Methode _ _str_ _ nicht verwenden, wenn Sie eine UUID oder ID wünschen. Ich aktualisiere meine Antwort. Benutze stattdessen _ _unicode_ _ Methode. –
Das war es. Die Zugabe der zusätzlichen .id löste das Problem. Vielen Dank und vielen Dank für Ihre schnelle Antwort. Sehr geschätzt. – user917051