मैं फ़ाइल नाम यादृच्छिक होना चाहते हैं और इसलिए मैं upload_to
समारोह जो इतनी तरह एक यादृच्छिक फ़ाइल नाम देता है का उपयोग करें:Django: FileField में मूल फ़ाइल नाम कैसे सहेजें?
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)
हालांकि मैं मॉडल मौजूद विशेषता करने के लिए मूल फ़ाइल नाम को बचाने के लिए करना चाहते हैं। ऐसा कुछ काम नहीं करता है:
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)
मैं यह कैसे कर सकता हूं?
धन्यवाद।
यह मेरे परीक्षणों में पूरी तरह से ठीक काम करता है। यह वास्तव में आपके लिए कैसे काम नहीं करता है? क्या होता है? शायद समस्या कोड में समस्या है? – rantanplan
एक बार जब आप ऐसा करते हैं और ऑब्जेक्ट को डीबी से पूछते हैं, तो क्या आप अभी भी फ़ाइल नाम के लिए मान देखते हैं? – miki725
हां। मैंने वास्तव में इसे खोल के अंदर परीक्षण किया। मैंने इसे मार दिया, इसे फिर से लॉन्च किया और फ़ाइल नाम वहां था। दरअसल मैंने पहले सोचा था कि आप get_random_filename के अंदर 'instance.save() 'करना भूल गए हैं। लेकिन ऐसा लगता है कि इसकी आवश्यकता नहीं है। – rantanplan