2009-02-03 14 views
10

Yüklenen bir resimden nasıl ImageField nesnesini oluşturabileceğinizi öğrenmek için help(django.db.models.ImageField) ve dir(django.db.models.ImageField) numaralı telefonu deniyorum.Django - Bir InMemoryUploadedFile öğesini bir ImageField'ın FieldFile haline nasıl çevirirsiniz?

request.FILESInMemoryUploadedFile olarak görüntüleri vardır, ancak bir ImageField içeren bir model kurtarmaya çalışıyorum, peki nasıl ImageField içine InMemoryUploadedFile açabilirim?

Bu tür bir şeyi bulmaktan nasıl vazgeçersiniz? İki sınıfın bir miras ilişkisi olduğunu sanıyorum, ama bakmam gerekip gerekmediğini öğrenmek için çok fazla dir() -ing yapmalıyım.

cevap

3

Bunu ModelForm'da yapmaya mı çalışıyorsunuz?

Bu i örnek alınması ve başlatma parametrelerinde kaynağında ne InMemoryUploadedFile sınıf ihtiyaçlarını bakabilirsiniz dosya alanı için

class UploadSongForm(forms.ModelForm): 
    class Meta: 
     model = Mp3File 

    def save(self): 
     content_type = self.cleaned_data['file'].content_type 
     filename = gen_md5() + ".mp3" 
     self.cleaned_data['file'] = SimpleUploadedFile(filename, self.cleaned_data['file'].read(), content_type) 
     return super(UploadSongForm, self).save() 

yaptığını nasıl.

def form_view(request): 
    if request.method == 'POST': 
     form = FooForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      return render_to_response('result.html') 
     return render_to_response('form.html', { 
      'form': form; 
      'error_messages': form.errors; 
     } 
    form = FooForm() 
    return render_to_response('form.html', { 
     'form': form; 
    } 

form.save() senin kadar diğer tüm alanlarla birlikte yüklenen dosyayı kaydeder:

, burada görünümü Form örneklerini kullanarak bir dosya yükleme alanı ile bir form uygulamak
+0

Teşekkür, ben daha yakın yarın Örneğin içine bir göz gerekir. Kullanıcıları görüntüleri iki kez yüklemekten kurtarmaya çalışırken formlar sürecini geçiyorum, bu yüzden clean_data işini yapamıyorum. –

1

olduğunu request.FILES yapıcısında dahil. senin modellerde böyle FooForm ModelForm sınıfının alt sınıfını tanımlamak zorunda: Foo sen ısrarla saklamak istediğiniz verileri açıklanır Model, alt sınıfı olan

class FooForm(ModleForm): 
    Meta: 
     model = Foo 

....

16

Sen doğrusu bir ImageField haline 'dönüm' den ImageField için InMemoryUploadedFile kaydetmek gerekir:

foo modeli örneği olan
image = request.FILES['img'] 
foo.imagefield.save(image.name, image) 

ve ImageFieldImageField olduğunu. Bir form üzerinden görüntü çekiyorsanız

Alternatif:

image = form.cleaned_data.get('img') 
foo.imagefield.save(image.name, image) 
+0

Bu cevap doğru değil. Dosya içeriğini, bir model örneğinde kaydetmeden istediğiniz gibi kullanabilirsiniz. Dosya özniteliğini denetle – Imnl

İlgili konular