Wagtail:将图像添加到自定义用户模型

Jul*_*ska 5 python django django-custom-user wagtail

我正在按照 Wagtail 文档来自定义用户模型。我想将图像添加到用户模型中。

Django 版本:2.0.8,Wagtail 版本:2.1

问题

使用图像选择器字段选择图像并单击“保存”后,出现以下错误:

'没有提交文件。检查表单上的编码类型。”

代码

模型.py

from django.db import models

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    display_image = models.ForeignKey('wagtailimages.Image', 
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+')
Run Code Online (Sandbox Code Playgroud)

表格.py

from django import forms
from django.utils.translation import ugettext_lazy as _

from wagtail.users.forms import UserEditForm, UserCreationForm
from wagtail.images.widgets import AdminImageChooser

class CustomUserEditForm(UserEditForm):
    display_image = forms.ImageField(
        widget=AdminImageChooser(), label=_('Autorenbild'))

class CustomUserCreationForm(UserCreationForm):
    display_image = forms.ImageField(
        widget=AdminImageChooser(), label=_('Autorenbild'))}
Run Code Online (Sandbox Code Playgroud)

编辑.html

{% extends "wagtailusers/users/edit.html" %}

{% block extra_fields %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.display_image %}
{% endblock extra_fields %}

{% block extra_js %}
    {{ block.super }}
    {% include 'wagtailadmin/pages/_editor_js.html' %}
{% endblock extra_js %}
Run Code Online (Sandbox Code Playgroud)

create.html 类似

到目前为止我尝试过的

AdminImageChooser使用我在这里找到的小部件的想法。我必须通过添加来调整表单,forms.ImageField以便用户页面显示没有错误。

问题

  1. 有人知道为什么会出现错误以及如何修复它吗?

  2. 正如上述 Google 小组帖子中所述,向用户模型添加图像似乎“有点尴尬”。将图像连接到用户以便在网站中重复使用的更好方法是什么?要求是可以在 Wagtail 管理中轻松更改图像。

Wagtail 2.2 版的其他问题

AdminImageChooser在管理界面的“设置”>“用户”中,未打开的窗口。

控制台显示以下 JS 错误:

未捕获的 ReferenceError:createImageChooser 未定义

小智 1

在同一个 Google 群组线程中使用最后提出的解决方案,ReferenceError: createImageChooser is not defined从 Wagtail 2.1 更新到 2.2 后也遇到了 js 问题

以下是我的研究进展:

看起来这个提交从 _editor_js.html 中删除了直接媒体 js 包含。

好的,解决方案是复制旧的行为,并访问小部件的媒体子类

首先,我尝试将相同的删除行添加到我自己的 edit.html 中{% block extra_js %}。不工作。

看起来有些视图又回来了edit_handler,就像这里一样。用户视图没有。

然而,用户视图在创建和编辑视图中提供的是表单变量。让我们使用它吧。

我的最终解决方案是更改 edit.html 中的 extra_js 块,如下所示:

{% block extra_js %}
    {{ block.super }}
    {% include 'wagtailadmin/pages/_editor_js.html' %}
    {{ form.media.js }}
{% endblock extra_js %}
Run Code Online (Sandbox Code Playgroud)