Nicht aufgelöste Referenz auf sich selbst für Klasse-Funktion
Warum ist meine IDE sagt mir, dass es ein Unresolved reference to self
in der Zeile:
--> photo = models.ImageField(upload_to=self.upload_path)
Code:
class Photo(models.Model):
title = models.CharField(max_length=50, blank=True)
album = models.ForeignKey(Album)
photo = models.ImageField(upload_to=self.upload_path)
upload = models.DateTimeField(auto_now_add=True)
def upload_path(self, filename):
title = self.album.title
if " " in title:
title.replace(" ", "_")
return os.path.join(title, filename)
Dieser Fehler nicht auftaucht, wenn ich den upload_path
Funktion außerhalb der Klasse. Allerdings möchte ich die Funktion innerhalb der Klasse, um zu versuchen zu halten die Dinge ordentlich.
Keine IDE Fehler, aber ich bin nicht sicher, warum.
def upload_path(self, filename):
title = self.album.title
if " " in title:
title.replace(" ", "_")
return os.path.join(title, filename)
class Photo(models.Model):
title = models.CharField(max_length=50, blank=True)
album = models.ForeignKey(Album)
photo = models.ImageField(upload_to=upload_path)
upload = models.DateTimeField(auto_now_add=True)
- Da
self
existiert nicht außerhalb von Methoden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
self
kann nur verwendet werden, innerhalb der Klasse Methoden, die es definieren als parameter.In diesem Fall, Sie brauchen, um zu behandeln die Methode als eine ungebundene Methode (ohne den Wert für
self
), weil Django selbst wird übergeben, in der die Instanz als Erster parameter:Beachten Sie, dass, weil Sie mit
upload_path
innerhalb der Klassendefinition selbst, die Verwendung muss nach der definition vonupload_path
.Edit:
Laut dieser bug-report, es ist eine Einschränkung in Django ' s migration-system auf Python 2.x, die bewirkt, dass es nicht funktioniert mit dem obigen code, obwohl der code selbst korrekt ist. Sie haben, um die Funktion außerhalb der Klasse um Migrationen.
Die Dokumentation Staaten:
AttributeError: 'module' object has no attribute 'upload_path'