从管理员视图外部更新Wagtail ModelAdmin wagtailimage.Image字段

时间:2019-04-17 23:53:59

标签: wagtail

我有一个Wagtail ModelAdmin,它具有一个模型,该模型的字段类型为wagtailimage.Image,并带有以下代码:

partner_logo = models.ForeignKey(
    'wagtailimages.Image',
    null=True,
    blank=True,
    on_delete=models.SET_NULL,
    related_name='+'
)

我已经注册了此ModelAdmin,因此可以在Wagtail Admin视图中对其进行编辑,并将图像成功上传到partner_logo字段。然后,我可以从管理员视图更新图像。

我希望用户能够从前端更新图像。我创建了一个接受图像并将其传递给后端的表单。然后,我尝试使用以下代码更新图像:

def upload_pic(request):
    if request.method == 'POST':
        partner_name = request.user.partner().partner_name
        partner_model = Partner.objects.get(partner_name=partner_name)

        partner_model.partner_logo.file = request.FILES['image']
        partner_model.partner_logo.save(update_fields=['file'])

        return HttpResponse('image upload success')
    return HttpResponseNotAllowed('allowed only via POST')

这将获取我们要更新的正确模型,为partner_logo字段设置文件,然后保存模型。我相信我是其中的一部分,因为图像是保存时上传到我的媒体目录中的,但是我想我没有更新其他内容,因为它实际上并没有更新模型。

任何建议都会很棒!谢谢。

1 个答案:

答案 0 :(得分:0)

在这里找到答案:https://stackoverflow.com/a/42551931/909446

下面的工作代码:

from wagtail.images.models import Image


def upload_pic(request):
    if request.method == 'POST':
        partner_name = request.user.partner().partner_name
        partner_model = Partner.objects.get(partner_name=partner_name)

        new_logo = Image.objects.create(
            file=request.FILES['image'],
            title=f'{partner_name}-logo'
        )

        partner_model.partner_logo = new_logo
        partner_model.save()

        return HttpResponse('image upload success')
    return HttpResponseNotAllowed('allowed only via POST')