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 الخاص بك أيضا إذا كنت تحب.







django-models