2010-01-09 16 views
9

मैं django व्यवस्थापक में उपयोग के लिए एक मजबूत, स्थिर django फ़ाइल प्रबंधक की तलाश में हूं।क्या आप व्यवस्थापक के लिए एक अच्छा django फ़ाइल प्रबंधक की सिफारिश कर सकते हैं?

मेरे आवश्यकताओं इच्छा सूची:

  1. सर्वर पर ब्राउज़िंग और का चयन फ़ाइलों की अनुमति देता है (उदाहरण के लिए चित्र)
  2. फ़ाइलों को अपलोड करने की अनुमति देता है। एकाधिक फ़ाइल अपलोड मुझे (Django-समझते करता है) की तरह अपने मॉडल परिभाषा में एक कस्टम फ़ील्ड का उपयोग करने की आवश्यकता नहीं है (, के साथ जैसे uploadify)
  3. बहुत अच्छा होगा। मुझे कुछ ऐसा चाहिए जो आदर्श रूप से char.pyield (या FileField की ImageField) से प्रशासित हो, जैसे कि कार्ल मेयर के django-adminfiles

मैं django-filebrowser (गैर grappelli संस्करण) का उपयोग किया है और यह भी देखा (लेकिन उनका उपयोग नहीं) django-adminfiles। दोनों बहुत अच्छे हैं। लेकिन django-filebrowser को मेरे मॉडल में एक कस्टम फ़ील्ड का उपयोग करने की आवश्यकता है, साथ ही मैं 'संस्करण' (एकाधिक छवि आकार) कार्यक्षमता नहीं चाहता हूं। django-adminfiles textareas में इनलाइन के रूप में फ़ाइलों को सम्मिलित करने के लिए है, इसलिए मैं जो खोज रहा हूं वह नहीं है।

मैं अपने आवश्यकताओं के अनुरूप इनमें से किसी एक को संशोधित करने के लिए खुश हूँ, लेकिन ऐसा करने के लिए नफरत है अगर वहाँ कुछ अन्य विकल्प वहाँ मैं याद कर रहा हूँ कर रहे हैं।

+0

https://github.com/sehmaschine/django-filebrowser अब और मॉडल में कस्टम फ़ील्ड की आवश्यकता प्रतीत नहीं होता है। –

उत्तर

2

एफडब्ल्यूआईडब्ल्यू, डीजेंगो-एडमिनफाइल ने फ़ाइल-ब्राउजर को चुनिंदा ड्रॉपडाउन प्रतिस्थापन के रूप में उपयोग करने के लिए कुछ नई कार्यक्षमता भी दफन कर दी है: इसलिए आपके मॉडल के पास "फ़ाइल अपलोड" मॉडल के लिए विदेशीकी होगी, और आप उस विदेशीकी को भरने के लिए ब्राउज़ करें। क्या आप जो खोज रहे हैं उसके करीब है?

मुझे कुछ समय में उस सुविधा की आवश्यकता या उपयोग नहीं किया गया है, यह दस्तावेज या परीक्षण नहीं किया गया है, और मैंने इसे जोड़ने के बाद बहुत सारे पुनर्लेखन किए हैं, इसलिए यह काम करने की स्थिति में हो सकता है या नहीं। लेकिन यह मेरी कामकाजी सूची में है कि इसे काम करने की स्थिति में वापस लाने के लिए इन दिनों में से एक है, और मैं निश्चित रूप से थोड़ी प्रेरित सहायता पर ऑब्जेक्ट नहीं करता ;-)

+1

जो मैं ढूंढ रहा हूं उसके करीब है, लेकिन काफी नहीं।अन्य ऐप्स पर निर्भरताओं को समाप्त करने के हित में, मैं चाहता हूं कि मेरा मॉडल चारफिल्ड/फ़ाइलफिल्ड/छवि फ़ील्ड के साथ प्राप्त करने में सक्षम हो। फिर फ़ाइल प्रबंधक उपयोगकर्ता चयन के आधार पर सापेक्ष पथ को सापेक्ष पथ के साथ अपडेट करेगा। ऐसा लगता है कि django-adminfiles textareas में "इनलाइन" सम्मिलन के लिए कुछ ऐसा कर रहा है। यदि कोई अन्य उत्तर यहां पॉप अप नहीं करता है, तो शायद मैं आपके django-adminfiles को बदलने का प्रयास करूंगा। (रास्ते से अच्छा ऐप। धन्यवाद!) – zlovelady

+0

यदि उसके लिए कोई विजेट है, तो विजेट को संशोधित करना और इसे 'फ़ाइलपाथफ़िल्ल्ड' पर विजेट के रूप में उपयोग करना संभव हो सकता है, जो मुझे लगता है कि 'चारफ़िल्ल्ड' जैसा है जो विकल्पों को सीमित करता है एक विशेष पथ में एक फाइल के लिए। – LeafStorm

+0

@zlovelady - यह decoupled उपयोग के लिए वास्तव में एक अच्छा विचार है; मैं इस तरह की सुविधा को django-adminfiles में खींचने के विपरीत नहीं होगा। –

1

प्रश्न पोस्ट करने के बाद, मैंने पाया कि django-filebrowser में एक है FileBrowseWidget। कुछ बदसूरत हैक्स लागू होने के साथ, मैं इसे छविफिल्ड और फ़ाइलफिल्ड पर django व्यवस्थापक में काम करने में सक्षम था (मॉडल पर आवश्यक filebrowser.fields.FileBrowseField नहीं)।

मैं तो इस तरह उपयोग कर रहा हूँ (GitHub पर wardi से non-grappelli-dependent django-filebrowser साथ), और यह काम कर रहा है।

# a few changes to filebrowser/fields.py 

class FileBrowseWidget(Input): 
    ... 

    # change the default value of attrs from None to {} 
    def __init__(self, attrs={}): 
     ... # the rest unchanged 

    # change the default value of attrs, and the first few lines of render, like so 
    def render(self, name, value, attrs={}): 
     if value is None: 
      value = "" 
     else: 
      # set an attribute on value that the filebrowser templates need in 
      # order to display the thumbnail photo in the admin 
      for suffix in ['gif', 'GIF', 'jpg', 'JPG', 'png', 'PNG']: 
       if hasattr(value, 'path') and value.path.endswith("." + suffix): 
        value.filetype = "Image" 
        break 
     ... # the rest unchanged 


# admin.py 

from filebrowser.fields import FileBrowseWidget 

class FileBrowseForm(forms.ModelForm): 
    # Use a CharField, not an ImageField or FileField, since filebrowser 
    # is handling any file uploading 
    image = forms.CharField(required=True, widget=FileBrowseWidget()) 

class SomeModelAdmin(admin.ModelAdmin): 
    # SomeModel has an ImageField named image 
    form = FileBrowseForm 

    ... # the rest of the admin definition 

इसमें कुछ समय बदसूरत है, लेकिन अब के लिए काम कर रहा है। यह django-filebrowser पर मॉडल-स्तरीय निर्भरता को समाप्त करता है और व्यवस्थापक को निर्भरता को धक्का देता है, जहां मैं इसे चाहता था।

2

एक परिशिष्ट के जवाब @zlovelady के रूप में, मैं भी अपने मॉडल परिभाषाओं से Django-समझते दसगुणा चाहता था।

हो सकता है कि उनके कोड के बाद से बदल गया है, लेकिन नुस्खा काफी किसी भी अधिक काम नहीं किया। मैं यह काम कर पाने के इस के साथ समाप्त हो गया (द्वारा उप-classing FileBrowserWidget):

from filebrowser.base import FileObject 
from filebrowser.fields import FileBrowseWidget as fb_FileBrowseWidget 
from filebrowser.sites import site as filebrowser_site 

class FileBrowseWidget(fb_FileBrowseWidget): 
    def render(self, name, value, attrs=None): 
     if value is None: 
      value = "" 
     else: 
      value = FileObject(value.name, site=self.site) 
     return super(FileBrowseWidget, self).render(name, value, attrs) 

class FileBrowseForm(forms.ModelForm): 
    # Use a CharField, not an ImageField or FileField, since filebrowser 
    # is handling any file uploading 
    image = forms.CharField(
     required=True, 
     widget=FileBrowseWidget(attrs={'site':filebrowser_site}) 
    ) 

मैं कोई grappelli संस्करण का उपयोग नहीं कर रहा हूँ, लेकिन मैं यह मायने रखता है, प्रासंगिक कोड में एक ही देखा नहीं लगता कि दोनों संस्करण

+0

इससे मुझे एक टन मदद मिली। – sdornan

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

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