Обновление Wagtail ModelAdmin wagtailimage.Image в поле снаружи Admin View - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть 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 голосов
/ 18 апреля 2019

Найден ответ здесь: 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')

...