2014-06-06 15 views
5

Ben benzer bir modeli takip ediyor serileştirici/var ImageField FileField ile iç içe Serileştiriciler imza dosyası ve gerekli 'uygulama/json' verisi ile multipart/form verileri.Django istirahat Çerçevesi: Ben</p> <pre><code>class Ticket: customer = Customer() ... class Customer: signature = FileField() name = CharField() </code></pre> <p>Ve yeni 'Bilet' POST DRF en serializers kullanmak istiyorum, bu yüzden gönderin:

çıkan istek, dosya ve verileri topladıktan sonra, şuna benzer:

>>> request.FILES 
<MultiValueDict: {u'customer.signature': [<InMemoryUploadedFile: signature.jpg (image/jpeg)>]}> 
>>> data 
{u'customer': {u'name': u'Test'}, ... } 
>>> serializer = TicketSerializer(data=data, files=request.FILES) 
>>> serializer.is_valid() 
False 
>>> serializer.errors 
{'customer': [{'signature': [u'This field is required.']}]} 

nasıl DRF Serileştiriciler/Alanlar 'müşteri' katmanı içindeki ImageFields/FileFields doldurmak için kullanılır?

en düz İleri cevap yüklenen ImageField/FileField alıp bunları uygulamaktır:

+0

, benim 'FileField' ilgili modelin alanını referans veren özel alan olsa – Neil

cevap

3

ben ile geldi çözüm oldu, ben bu sorunu var tek değilim görünür yana diziselleştiricinin iç içe geçmiş 'veri' kısmı ile uygun konum. Benim durumumda, bu 'müşteri' dict içinde olurdu.

Dosyalara veriler düzgün bir şekilde uygulandıktan sonra, tüm dosyalar artık veriye dahil edildiğinden, 'files =' değişkenini bırakabiliriz. kodunda

Bir çalışma örnek şu şekilde görünecektir: Ben de aynı sorun var

>>> request.FILES 
<MultiValueDict: {u'customer.signature': [<InMemoryUploadedFile: signature.jpg (image/jpeg)>]}> 
>>> data 
{u'customer': {u'name': u'Test'}, ... } 
if 'customer.signature' in request.FILES: 
    data['customer']['signature_file'] = request.FILES['customer.signature'] 
>>> serializer = TicketSerializer(data=data) 
>>> serializer.is_valid() 
True 
İlgili konular