我正在尝试生成一个qr代码以分配给图像字段。我使用ModelAdmin中的save_model函数在另一个模型上没有遇到任何问题。现在,我需要在内联中执行此操作。显然,save_model在这里不起作用,我被告知save_formset是另一种方式,但我不能让它工作。我已经将我的代码与我看到的save_formset的其他实例进行了比较,并且看不到任何语法错误,但是django不会给我一个错误报告,所以我没有别的事情可以继续。
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 :(得分: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()