2010-11-23 4 views
16

यह मुझे मार रहा है!Django: सर्वर पर मौजूदा फ़ाइल से मैन्युअल रूप से छविफील्ड बनाएं

मैं django-filebrowser का उपयोग कर रहा हूं, और मैं एक गैलरी ऐप बनाना चाहता हूं जो छवियों को प्रबंधित करने के लिए इसकी अपलोड क्षमताओं का लाभ उठाता है।

मेरे पास एक गैलरी मॉडल है जो उपयोगकर्ता को सर्वर पर निर्देशिका चुनने या बनाने की अनुमति देता है, और उस फ़ोल्डर में फ़ाइलों को गैलरी में प्रदर्शित करने की अनुमति देता है। मैं उस निर्देशिका को स्वचालित रूप से ट्रैवल करना चाहता हूं जिसे उपयोगकर्ता ने छवियों को अपलोड और अपलोड किया है, और उसके बाद फ़ोल्डर में प्रत्येक छवि के लिए स्वचालित रूप से छवि उदाहरण बनाते हैं।

class Gallery(model.Models): 
    gallerydirectory = FileBrowserField(...) 
    title = ... 
    description ... 

class Image(model.Models): 
    image_field = models.ImageField() 

समस्या यह है कि यह मानते हुये Django के लिए अलग तरह छवियों का प्रतिनिधित्व करता है, लेकिन मैं Django ImageFields उपयोग करने के लिए के रूप में मैं फिर टेम्पलेट अंत पर अन्य एप्लिकेशन (sorl थंबनेल) का उपयोग कर सकते हैं।

मेरे पास फ़ाइल यानी फ़ाइल नाम, पथ इत्यादि के लिए आवश्यक सभी डेटा हैं, मैं वास्तव में छवि को फिर से अपलोड किए बिना, एक छविफाइल का उदाहरण बनाने के लिए Django नहीं प्राप्त कर सकता। मैं बस इसे पॉप्युलेट करना चाहता हूं।

मैं एक और धागा here जो निम्नलिखित पता चलता है देखा है:

for image in filebrowser_image_objects_list: 
    f = File(open('path-to-file-on-server','r')) 
    i = Image() 
    i.image_field('filename.png',f.read()) 

लेकिन यह मुझे एक दे रहा है:

SuspiciousOperation error 
Attempted access to '/filename.png' denied 

जो पता चलता है कि पथ सही ढंग से पढ़ा नहीं जा रहा है। मैंने फ़ाइल ऑब्जेक्ट के गुणों को मुद्रित किया है, और यह सही छवि खोल रहा है, यह सिर्फ ImageField

सहायता पर बहुत सराहना की जाएगी!

अद्यतन

मैं के रूप में यह अभी भी गंदा है यह काम करने की कोशिश कर छोड़ दिया गया है। मेरी समस्या ऊपर थी कि मैंने ImageField के upload_field को '/' पर सेट किया था और यह अनजान अर्थ था कि फ़ाइल '/something.png' पर लिखी जा रही थी।

मैंने इसे संशोधित किया है ताकि छवि अब एक छविफिल्डर के बजाय फ़ाइलब्राउज़रफ़िल्ल्ड का उपयोग कर रही हो।

उत्तर

3

मैं कुछ कमी हो सकती है, लेकिन यह मेरे लिए काम किया:

from a1.models import Model1                
from django.core.files.images import ImageFile 
m = Model1.objects.create()                 
m.f1 = ImageFile(open("1.png", "rb"))  
m.save() 

निम्नलिखित मॉडल के लिए:

class Model1(models.Model):     
    f1 = models.ImageField() 

इस तरह यह काम नहीं किया:

m.f1('1.png', File.read(open('1.png', 'r'))) 

इसे कहते हैं:

TypeError: 'ImageFieldFile' object is not callable 

Django 1.7, 1.11 के साथ जांच की गई।

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