Ich habe, was ich als eine einfache Frage sein. In meinem Modell habe ich eine models.ImageField, die so aussieht:Python Django: Wie man eine Datei mit einem Dateinamen auf Instanz pk basierend hochladen
class CMSDocument(BaseItem):
thumb = models.ImageField(upload_to= './media/',blank=True)
Aber ich würde es laden gerne '.media/' + self.pk+ '.png'
Ich habe versucht, das Feld innerhalb der Speichermethode des Modells zu aktualisieren, aber das funktioniert nicht, wie der pk nicht bekannt ist, wenn 'save' aufgerufen wird. Ich habe auch versucht, eine benutzerdefinierte Funktion für upload_to hinzuzufügen, wie hier vorgeschlagen: Django: Any way to change "upload_to" property of FileField without resorting to magic?. Aber das lässt das Feld leer. Was kann ich tun?
EDIT: Ich benutze 1.6 Django
EDIT: Ich habe ein post_save Signal, das nicht sehr schön ist:
def video_embed_post_save(sender, instance=False, **kwargs):
document = DocumentEmbedType.objects.get(pk=instance.pk)
new_thumb = "media/%s.png" % (document.pk,)
if not document.thumb == new_thumb:
document.thumb = new_thumb
document.save()
...
versuchen diese http://stackoverflow.com/questions/651949/django-access-primary-key-in-models-filefieldupload-to-location – madzohan
Ein sehr hackischer Ansatz besteht darin, in der Save-Methode die ID des letzten Datensatzes zu erhalten und sie dann um eins zu erhöhen und sie als neue ID zu verwenden. – Ymartin
hmmm, ich am Ende tatsächlich ein post_save Signal aufbrauchen, die ein bisschen wie ein Hack ist (ich überprüfen, ob der Dateiname richtig ist schon, wenn ich es nicht ändern und das Modell speichern. Auf diese Weise erhalte ich keine Probleme mit Rekursion). Aber ich werde @madzohan Lösung prüfen. – Magda