2013-08-30 24 views
0

我想要生成一個二維碼分配給圖像字段。我使用ModelAdmin中的save_model函數在另一個模型上完成了這個任務。現在,我需要在Inline中完成它。顯然,save_model在這裏不起作用,而且我被告知save_formset是取而代之的方式,但是我無法讓它工作。我已經將我的代碼與我已經看到的save_formset的其他實例進行了比較,並且看不到任何語法錯誤,但是django不會給我一個錯誤報告,所以我沒有其他任何事情可以繼續。save_formset爲StackedInline不起作用

class InstrumentAdmin(admin.ModelAdmin): 
    inlines = [ 
     AssetInline, 
    ] 
    def save_formset(self, request, form, formset, change): 
     instances = formset.save(commit=False) 
     for f in instances: 
      # save the object first so we get an id number etc. 
      f.save() 
      # determine the URL 
      url='{}{}'.format(HOMEURL,f.get_absolute_url()) 
      # build a qr code 
      qr = qrcode.QRCode(box_size=3) 
      qr.add_data('FloWave TT {} {}'.format(f,url)) 
      qr.make(fit=True) 
      img=qr.make_image() 
      # save to memory 
      img_io= StringIO.StringIO() 
      img.save(img_io,'PNG') 
      img_file=InMemoryUploadedFile(img_io, None, 'assetqr{}.png'.format(f.id), 'image/png', img_io.len, None) 
      # update the object record with the qrcode 
      f.qrcode=img_file 
      f.save() 
     formset.save_m2m() 

回答

0

我已經解決了這個問題。我沒有直接通過save_formset編輯資產模型,而是在父級上使用了save_model,並使用它來編輯子級。因此:

def save_model(self, request, obj, form, change): 
    # save the object first so we get an id number etc. 
    obj.save() 
    obj.asset.save() 
    # determine the URL 
    url='{}{}'.format(HOMEURL,obj.get_absolute_url()) 
    # build a qr code 
    qr = qrcode.QRCode(box_size=3) 
    qr.add_data('FloWave TT {} {}'.format(obj,url)) 
    qr.make(fit=True) 
    img=qr.make_image() 
    # save to memory 
    img_io= StringIO.StringIO() 
    img.save(img_io,'PNG') 
    img_file=InMemoryUploadedFile(img_io, None, 'qr{}.png'.format(obj.id), 'image/png', img_io.len, None) 
    # update the object record with the qrcode 
    obj.asset.qrcode=img_file 
    obj.asset.save() 
    obj.save()