2013-08-30 5 views
0

Я пытаюсь сгенерировать qr-код для назначения полю изображения. Я сделал это без проблем на другой модели, используя функцию save_model в ModelAdmin. Теперь мне нужно сделать это в 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() 

 Смежные вопросы

  • Нет связанных вопросов^_^