python - Django FileField with upload_to محدد في وقت التشغيل
django-models (2)
ملاحظة حول استخدام قيمة pk للكائن "المثيل". وفقا للوثائق:
في معظم الحالات ، لن يتم حفظ هذا الكائن في قاعدة البيانات بعد ، لذلك إذا كان يستخدم AutoField الافتراضي ، فقد لا يكون لديه حتى الآن قيمة لحقل المفتاح الأساسي الخاص به.
لذلك ، تعتمد صلاحية استخدام pk على كيفية تعريف نموذجك الخاص.
أحاول إعداد تحميلاتي بحيث إذا قام المستخدم بتنزيل ملف ، فإنه ينتقل إلى MEDIA_ROOT / joe بدلاً من نقل ملفات الجميع إلى MEDIA_ROOT. المشكلة هي أنني لا أعرف كيفية تحديد هذا في النموذج. إليك كيفية ظهورها حاليًا:
class Content(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User)
file = models.FileField(upload_to='.')
ما أريده هو بدلاً من "." مثل upload_to ، يجب أن يكون اسم المستخدم.
أفهم أنه اعتبارًا من Django 1.0 ، يمكنك تحديد وظيفتك الخاصة للتعامل مع upload_to ولكن هذه الوظيفة لا تعرف من سيكون المستخدم إما لذلك فأنا فقد قليلاً.
شكرا للمساعدة!
من المحتمل أنك قرأت الوثائق ، لذلك إليك مثال سهل لجعله مفيدًا:
def content_file_name(instance, filename):
return '/'.join(['content', instance.user.username, filename])
class Content(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User)
file = models.FileField(upload_to=content_file_name)
كما ترون ، لا تحتاج حتى إلى استخدام اسم الملف المعطى - يمكنك تجاوز ذلك في upload_to الخاص بك أيضا إذا كنت تحب.