Ich möchte die Dateinamen zufällig sein und deshalb verwende ich upload_to
Funktion, die wie so einen zufälligen Dateinamen zurückgibt:Django: Wie wird der ursprüngliche Dateiname in FileField gespeichert?
from uuid import uuid4
import os
def get_random_filename(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
Allerdings Ich mag würde im Modell den ursprünglichen Dateinamen auf ein Attribut speichern. So etwas funktioniert nicht:
def get_random_filename(instance, filename):
instance.filename = filename
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
filename = models.CharField(max_length=128)
Wie kann ich es tun?
Vielen Dank.
Es funktioniert perfekt in meinen Tests. Wie genau funktioniert es nicht für dich? Was geschieht? Vielleicht liegt das Problem im View-Code? – rantanplan
Sobald Sie dies tun und das Objekt von db abfragen, sehen Sie immer noch den Wert für den Dateinamen? – miki725
Ja. Ich habe es tatsächlich in der Schale getestet. Ich tötete es, startete es erneut und der Dateiname war da. Eigentlich dachte ich zuerst, dass du vergessen hast, in get_random_filename eine 'instance.save()' zu schreiben. Aber es scheint, dass es nicht benötigt wird. – rantanplan