2010-01-07 15 views
6

नहीं हटेंगे मैं जो एक FileField के साथ एक मॉडल है Django के साथ एक आवेदन पत्र, को लागू करने कर रहा हूँ अद्यतन:Django - एक मॉडल वर्ष FileField

class Slideshow(models.Model): 
    name = models.CharField(max_length=30,unique=True) 
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails") 

और मैं एक व्यवस्थापक बैकएंड जहां Django मॉडल प्रबंधन करता है। मैं सिर्फ फ़ाइल admin.py जोड़ा गया है और Django सब कुछ के लिए मुझे

from django.contrib import admin 

from apps.gallery.models import Slideshow 

admin.site.register(Slideshow) 

बैकएंड में, यह जोड़ने, हटाने और अद्यतन स्लाइडशो के लिए संभव है प्रबंधन करता है। हालांकि, जब मैं एक स्लाइड शो अपडेट करने और इसकी विशेषता थंबनेल [FileField] को बदलने का प्रयास करता हूं, django पुरानी फ़ाइल को हटा नहीं देता है। नतीजतन, कई अद्यतनों के बाद सर्वर कई फाइलों से भरा है जो बेकार हैं। मेरा प्रश्न है: मैं अद्यतन के बाद स्वचालित रूप से उन फ़ाइलों को django कैसे हटा सकता हूं?

मैं वास्तव में मुझे यकीन है कि Django डिजाइन करके करता हूँ आपकी मदद

उत्तर

1

की सराहना करेंगे। यह नहीं पता, उदाहरण के लिए, क्या कोई अन्य मॉडल उस फ़ाइल का उपयोग कर रहा है या नहीं। यदि आप फ़ाइल को रहने की उम्मीद करते हैं और पता चला है कि django इसे हटा दिया है तो आप भी वास्तव में आश्चर्यचकित होंगे!

हालांकि, यह भी मुद्दा है कि जैसे ही आप फ़ाइल फ़ील्ड बदलते हैं, आप पुरानी फ़ाइल नाम खो देते हैं।

है कि समस्या के बारे में एक खुली टिकट दिया गया है: http://code.djangoproject.com/ticket/11663

http://code.djangoproject.com/ticket/2983 में एक पैच से पता चलता है जो कैसे __set__ ओवरराइड करने के लिए पिछले फ़ाइल नाम स्टोर करने के लिए नहीं है। फिर आपके मॉडल की __save__ विधि इसे हटाने के लिए पिछले फ़ाइल नाम तक पहुंच प्राप्त कर सकती है।

+0

हाँ, आप सही कर रहे हैं! डीजेंगो डेवलपर्स इस रिलीज के लिए नए रिलीज में नए डिजाइन में काम कर रहे हैं। फ़ाइलों में से एक को अपलोड करने योग्य फ़ाइलों को अपलोड करने के लिए फ़ाइलफिल्ड्स में एक अतिरिक्त विकल्प जोड़ना है: http://groups.google.com/group/django-developers/browse_thread/thread/491619541ba6ac75 मैं इस विचार का समर्थन करता हूं, " आपकी सहायता सेथ के लिए धन्यवाद "मैं उस पैच का उपयोग कर सकता हूं जिसके बारे में आपने मुझे बताया था। – raulsan

+0

बस एक और विचार था - आप ** 'show_hidden_initial ** विकल्प को अपने' फाइलफ़िल्ल्ड 'में जोड़ने का प्रयास कर सकते हैं। संभवतः एक नई फ़ाइल अपलोड होने से पहले आपको 'फाइलफिल्ड' के मूल मूल्य तक पहुंच प्रदान होगी। – Seth

2

मैंने इस समस्या के बारे में बहुत कुछ सोचा, और अंततः मुझे मेरे लिए अच्छी तरह से काम करने से समाधान मिल गया। आप प्रोजेक्ट में सभी मॉडल पा सकते हैं और उन्हें pre_save और post_delete सिग्नल कनेक्ट कर सकते हैं।

अंत में मैं एप्लिकेशन बनाया है, जो इस समस्या sloves - django-cleanup

+0

एक अच्छा समाधान की तरह लग रहा है। मैं अब django पर काम नहीं कर रहा हूं और इसका परीक्षण नहीं कर सकता लेकिन मैं आपके योगदान के लिए धन्यवाद, un1t! – raulsan

संबंधित मुद्दे