البرمجة

رفع عدة ملفات في Django

لرفع عدة ملفات عبر حقل نموذج في Django، يمكنك تعديل طريقة تعاملك مع حلقة الطلب في views.py لتتمكن من حفظ كل ملف بشكل منفصل. في حالتك، تستخدم مجال “files” لحفظ الملفات. لكن، عندما تستخدم form.save()، يتم حفظ ملف واحد فقط. لحل هذه المشكلة، يجب عليك استخدام commit=False للحصول على كائن النموذج قبل الحفظ وبعد ذلك تحفظ كل ملف بشكل منفصل. اليك كيفية تعديل views.py:

python
def post_feed(request): if request.method == 'POST': form = FeedForm(request.POST, request.FILES) if form.is_valid(): feed = form.save(commit=False) feed.user = request.user feed.pub_date = timezone.now() feed.save() # حفظ كل ملف بشكل منفصل for file in request.FILES.getlist('files'): feed.files.create(file=file) return redirect('home') else: form = FeedForm() return render(request, 'post_feed.html', {'form': form})

في هذا الكود، feed.files.create(file=file) ينشئ كائن ملف جديد لكل ملف تم تحميله في النموذج ويربطه بكائن Feed الذي تم حفظه. تأكد من إضافة الرمز {% csrf_token %} في نموذج الاستمارة في قالب HTML الخاص بك لتفادي الأخطاء المحتملة.

المزيد من المعلومات

بالطبع! إذا كنت تبحث عن مزيد من المعلومات حول رفع عدة ملفات في Django، فإليك بعض النقاط التي قد تجدها مفيدة:

  1. استخدام getlist: في مثال الرمز الذي قدمته، استخدمت request.FILES.getlist('files') للحصول على قائمة بجميع الملفات المحملة. هذا الأمر مهم لأن حقل الملف الذي يسمح برفع عدة ملفات (multiple=True) يرسل ملفات متعددة، وعليك استخدام getlist لمعالجتها بشكل صحيح.

  2. تعيين معرف المستخدم: في الكود الذي قدمته، قمت بتعيين feed.user إلى User.objects.get(pk=1)، ولكن من الأفضل استخدام request.user للحصول على معرف المستخدم المتواجد في الجلسة الحالية.

  3. إعادة توجيه بعد الحفظ: بعد حفظ البيانات بنجاح، يمكنك استخدام return redirect('home') لإعادة توجيه المستخدم إلى الصفحة الرئيسية أو أي صفحة أخرى تريدها.

  4. إضافة الرمز CSRF: تأكد من وجود {% csrf_token %} داخل نموذج الاستمارة في الصفحة الخاصة بك لحماية تطبيقك من هجمات Cross-Site Request Forgery (CSRF).

  5. إدارة التكرار: يجب عليك التأكد من إدارة التكرار بشكل صحيح في حلقة الطلب الخاصة بك. في الكود السابق، تم التعامل مع كل حالة بشكل منفصل لضمان حفظ جميع الملفات.

  6. الاستجابة بعد الحفظ: بالنسبة لـ success_url، يجب عليك تحديد الصفحة التي ترغب في تحميلها بعد نجاح الحفظ. يمكنك تعيين قيمة لهذه المتغير بعد التوجه بنجاح.

إذا كنت بحاجة إلى مساعدة أو توضيح إضافي، فلا تتردد في سؤالي.

زر الذهاب إلى الأعلى