2009-02-11 20 views
60

मैं Django में एक साधारण रियल एस्टेट लिस्टिंग ऐप लिख रहा हूं। प्रत्येक संपत्ति में छवियों की एक चर संख्या की आवश्यकता होती है। छवियों को एक संपादन योग्य आदेश होना चाहिए। और मुझे व्यवस्थापक उपयोगकर्ता-सबूत बनाना होगा।प्रति मॉडल एकाधिक छवियां

तो उसने कहा, मेरे विकल्प क्या हैं?

  1. क्या कोई छविसूची फ़ील्ड है जिसके बारे में मुझे नहीं पता?

  2. क्या कोई एप django.contrib.comments है जो मेरे लिए काम करता है?

  3. अगर मुझे इसे खुद लिखना है, तो मैं व्यवस्थापक-पक्ष को सभ्य बनाने के बारे में कैसे जाऊं? मैं इमेजफिल्ड प्रदान करता है उससे कुछ बहुत धीमी कल्पना कर रहा हूं, कुछ ड्रैग'ड्रॉप को फिर से ऑर्डर करने के लिए। लेकिन मैं व्यवस्थापक पृष्ठों लेखन पर एक पूरा clutz हूँ = (

उत्तर

94
  1. वैरिएबल सूचियां संपत्ति के लिए।, यह भी एक बहुत-से-एक संबंध के रूप में जाना जाता है, आम तौर पर कई के लिए एक अलग मॉडल बनाने और, उस मॉडल में, "एक" करने के लिए एक ForeignKey का उपयोग करके नियंत्रित किया जाता है

  2. django.contrib में ऐसा कोई ऐप नहीं है, लेकिन वहां से हैं आप बाहरी बाहरी परियोजनाओं का उपयोग कर सकते हैं, उदाहरण के लिए django-photologue जो व्यवस्थापक में छवियों को देखने के लिए भी कुछ समर्थन है।

  3. व्यवस्थापक साइट को "उपयोगकर्ता प्रमाण" नहीं बनाया जा सकता है, इसका उपयोग केवल विश्वसनीय उपयोगकर्ताओं द्वारा किया जाना चाहिए। यह देखते हुए, आपकी व्यवस्थापक साइट को सभ्य बनाने का तरीका आपकी संपत्ति के लिए मॉडलएडमिन को परिभाषित करना होगा और फिर फ़ोटो (inline documentation) को रेखांकित करना होगा।

    # models.py 
    class Property(models.Model): 
        address = models.TextField() 
        ... 
    
    class PropertyImage(models.Model): 
        property = models.ForeignKey(Property, related_name='images') 
        image = models.ImageField() 
    

    और:

तो, आप कुछ त्वरित ड्राफ्ट देने के लिए, सब कुछ कुछ इस तरह दिखेगा

# admin.py 
class PropertyImageInline(admin.TabularInline): 
    model = PropertyImage 
    extra = 3 

class PropertyAdmin(admin.ModelAdmin): 
    inlines = [ PropertyImageInline, ] 

admin.site.register(Property, PropertyAdmin) 

ForeignKey पर related_name तर्क का उपयोग करने के लिए कारण है इसलिए आपके प्रश्न अधिक पठनीय होंगे, उदाहरण के लिए इस मामले में आप अपने ध्यान में रखते हुए कुछ इस तरह कर सकते हैं:

property = Property.objects.get(pk=1) 
image_list = property.images.all() 

संपादित करें: उल्लेख करने के लिए, आप तो व्यवस्थापक में ड्रैग और ड्रॉप आदेश सिमोन विललिसन की झलकी Orderable inlines using drag and drop with jQuery UI

+1

संपत्ति छवि मॉडल में ऑर्डर करने के लिए एक फ़ील्ड शामिल होना चाहिए। – akaihola

+2

यह एक उद्धारक था ... धन्यवाद एक टन –

+1

धन्यवाद, अद्भुत!थोड़ी सी बदलाव के बाद ऑर्डर करने योग्य स्निपेट बहुत अच्छा काम करता है, क्योंकि यह फाइलफिल्ड्स के लिए नहीं लिखा गया है। लाइन 59 बनने की जरूरत है "अगर ($ (यह)। ढूँढें ('इनपुट [प्रकार = फ़ाइल]')। वैल() || $ (यह)। ढूँढें ('p.file-upload')। लंबाई) {" यह जांचने के लिए कि क्या पहले से ही एक फ़ाइल अपलोड हो चुकी है, या एक फ़ाइल अपलोड लंबित है। साथ ही, यह एक स्टैक्डइनलाइन पर काम करता है, न कि टैबुलरइनलाइन (बॉक्स के बाहर, वैसे भी)। – mrooney

5

कि आपकी प्रॉपर्टी मॉडल के लिए एक ForeignKey है कि एक छवि मॉडल लिखें। काफी शायद, आप कुछ अन्य क्षेत्रों छवि के लिए और नहीं है कि संबंधित होगा

3

मैं का उपयोग कर लागू कर सकते हैं भूल गया मैं वर्तमान में एक ही चीज़ के बारे में बताता हूं, और मुझे एक ही समस्या का सामना करना पड़ा।

मैंने थोड़ी देर के लिए शोध करने के बाद, मैंने django-imaging का उपयोग करने का निर्णय लिया। यह एक अच्छी Ajax सुविधा है, छवियों को उसी पृष्ठ पर अपलोड किया जा सकता है जैसे मॉडल सम्मिलित करें पृष्ठ, और संपादन योग्य हो सकता है। गैर-जेपीईजी एक्सटेंशन के लिए एकमात्र चीज की कमी है। मुझे आशा है कि मेरे पास दिनों में इसके लिए कामकाज होगा। :)

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