2011-08-31 12 views
5

का उपयोग कर प्रोफ़ाइल छवि अपलोड करना मैंने संबंधित प्रश्नों पर चारों ओर देखा है, लेकिन कोई भी जवाब काम नहीं कर रहा है। मैं किसी उपयोगकर्ता के लिए प्रोफ़ाइल छवि अपलोड करने का प्रयास कर रहा हूं और इसे वर्तमान छवि को प्रतिस्थापित (ओवरराइट) कर रहा हूं। छवि को सहेजने पर मैं फ़ाइल आईडी को उपयोगकर्ता आईडी में बदलना चाहता हूं। वर्तमान स्वरूप में छवि अपलोड हो जाएगी, लेकिन यह मौजूदा छवि को प्रतिस्थापित नहीं करेगी (उदा। इसे 2_1.png के रूप में सहेजा जाएगा)।Django ModelForm

class PhotoForm(forms.ModelForm): 
    def save(self): 
     content_type = self.cleaned_data['photo'].content_type.split('/')[-1] 
     filename = '%d.%s' % (self.instance.user.id, content_type) 

     instance = super(PhotoForm, self).save(commit=False) 
     instance.photo = SimpleUploadedFile(filename, self.cleaned_data['photo'].read(), content_type) 
     instance.save() 
     return instance 

    class Meta: 
     model = UserProfile 
     fields = ('photo',) 

def photo_form(request): 
    if request.method == 'POST': 
     form = PhotoForm(data=request.POST, file=request.FILES, instance=request.user.get_profile()) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = PhotoForm() 
    return render(request, 'photo_form.html', {'form': form}) 

उत्तर

5
def photo_form(request): 
    if request.method == 'POST': 
     form = PhotoForm(data=request.POST, file=request.FILES, instance=request.user.get_profile()) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['<name of the FileField in models.py>']) 

def handle_uploaded_file(f): 
    dest = open('/path/to/file', 'wb') # write should overwrite the file 
    for chunk in f.chunks(): 
     dest.write(chunk) 
    dest.close() 

यहाँ की जांच: https://docs.djangoproject.com/en/dev/topics/http/file-uploads/ यदि वह काम नहीं करता है, मुझे लगता है तुम सिर्फ os.system इस्तेमाल कर सकते हैं फ़ाइल को नष्ट करने के लिए करता है, तो स्वरूप को स्वीकार किया है। शायद यह समाधान का इतना अच्छा नहीं होगा, लेकिन यह काम करना चाहिए।

+0

धन्यवाद। यह एक जवाब है जो मैंने पार किया, लेकिन मैं चाहता था कि मॉडलफॉर्म बचत को संभाले। मैंने एक मौजूदा छवि को ओवरराइट करने और UserProfile मॉडल के तहत छवि क्षेत्र में नए संग्रहण का उपयोग करने के लिए FileSystemStorage को उपclassing समाप्त कर दिया। – dvw

+0

ओह ठीक है। सुनने के लिए बहुत अच्छा है कि आप इसे काम करने के लिए मिला! – randrumree

+0

आपके कोड में थोड़ा टाइपो है। dest.write (हिस्सा) –

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