【问题标题】:save_formset for StackedInline not workingStackedInline 的 save_formset 不起作用
【发布时间】:2013-08-30 15:34:04
【问题描述】:

我正在尝试生成一个二维码以分配给图像字段。使用 ModelAdmin 中的 save_model 函数,我在另一个模型上没有遇到任何问题。现在,我需要在 Inline 中执行此操作。显然, 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()

【问题讨论】:

    标签: django django-modeladmin


    【解决方案1】:

    我已经解决了这个问题。我没有直接通过 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()
    

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多