Django ImageField ändert den Dateinamen beim Hochladen
Beim speichern mir das Modell "Produkte", ich möchte das hochgeladene Bild mit demselben Namen wie die pk für Beispiel 22.png oder 34.gif ich will nicht zu ändern Sie das format des Bildes, nur der name. Wie kann das getan werden? Beispiel mein Modell so weit unten...
image = models.ImageField(
upload_to="profiles",
height_field="image_height",
width_field="image_width",
null=True,
blank=True,
editable=True,
help_text="Profile Picture",
verbose_name="Profile Picture"
)
image_height = models.PositiveIntegerField(null=True, blank=True, editable=False, default="100")
image_width = models.PositiveIntegerField(null=True, blank=True, editable=False, default="100")
InformationsquelleAutor der Frage jason | 2013-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie eine Funktion in
upload_to
Feld:Meine Vorschläge wären um gibt einen zufälligen Dateinamen statt
{pk}.{ext}
. Als bonus, es wird auch sicherer.Was passiert, ist, dass Django wird diese Funktion aufrufen, um zu bestimmen, wo die Datei hochgeladen werden soll. Das bedeutet, dass Ihre Funktion ist verantwortlich für die Rücksendung der ganze Pfad der Datei, einschließlich des Dateinamens. Unten ist die geänderte Funktion, wo Sie können angeben, wo upload und wie Sie es verwenden:
InformationsquelleAutor der Antwort miki725
Django 1.7 und neuere nicht-migration mit Funktion wie diese. Basierend auf der Antwort von @miki275 und diese ticket, Sie brauchen, um Ihre Funktion wie folgt:
InformationsquelleAutor der Antwort bmiljevic
Können Sie ersetzen Sie die Zeichenfolge Ihrer Zuordnung zu
upload_to
mit einem callable, wie beschrieben in der docs. Ich vermute aber, der primary key ist möglicherweise nicht verfügbar, an der Stelle, dieupload_to
parameter verwendet wird.InformationsquelleAutor der Antwort Aidan Ewen
Andere Möglichkeit, als nach dieser Antwort https://stackoverflow.com/a/15141228/3445802fanden wir das Problem, wenn wir Sie brauchen Rückweg mit
%Y/%m/%d
Beispiel:so handhaben wir es mit dieser:
InformationsquelleAutor der Antwort agaust