Трясогузка: добавление изображения в пользовательскую модель - PullRequest
0 голосов
/ 30 августа 2018

Я следую документации Wagtail, чтобы настроить пользовательскую модель . Я хочу добавить изображение в модель пользователя.

Django версия: 2.0.8, Версия трясогузки: 2.1

Задача

После выбора изображения в поле выбора изображения и нажатия кнопки «Сохранить» появляется эта ошибка:

'Файл не был отправлен. Проверьте тип кодировки в форме. '

Код

models.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='+')

forms.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'))}

edit.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 %}

create.html аналог

Что я пробовал до сих пор

Идея использовать виджет AdminImageChooser, который я нашел здесь . Мне пришлось скорректировать формы, добавив forms.ImageField, чтобы страница Пользователь отображалась без ошибок.

Вопросы

  1. Кто-нибудь знает, почему возникает ошибка и как ее исправить?

  2. Как указывалось в приведенной выше ветке группы Google, кажется, что добавление изображения в пользовательскую модель «немного неудобно». Как лучше подключить изображение к пользователю для повторного использования на сайте? Требуется, чтобы изображение можно было легко изменить в Wagtail admin.

Другая проблема с версией Wagtail 2.2

В Настройках> Пользователь в интерфейсе администратора окно AdminImageChooser не открывается.

Консоль показывает следующую ошибку JS:

Uncaught ReferenceError: createImageChooser не определен

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

models.py

class User(AbstractUser):
first_name = models.CharField(max_length=40, blank=False)
image = models.ImageField(blank=False, null=False, upload_to='image/', default='img/user.jpg') 



def __str__(self):
    return self.username

'' 'здесь вы можете добавить модель и их требования. Также вы можете задать путь, чтобы запомнить одну вещь, которую папка с изображениями создаст в папке мультимедиа ... поэтому не забудьте добавить эту папку туда. например, если вы найдете это полезным '' '

forms.py

class UserRegistrationForm(forms.ModelForm):

  confirm_password2 = forms.CharField(widget=forms.PasswordInput,required=False)     


class Meta:
 model = User
 fields = ['first_name','username','password','confirm_password2','image']

 def clean(self):
   cleaned_data = super(UserRegistrationForm, self).clean()
   password = cleaned_data.get("password")
   confirm_password2 = cleaned_data.get("confirm_password2")
   if password != confirm_password2:
    self.add_error('confirm_password2', "Password does not match")
    return cleaned_data

'' 'def clean для проверки пароля, и я непосредственно добавил поля, какие поля я хочу в нем' ''

views.py

def Register_view(request):
form = UserRegistrationForm()
if request.method == 'POST':
  form = UserRegistrationForm(request.POST, request.FILES)
  if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get("password")
        user.set_password(password)
        user.save()
        return redirect('login')
return render(request, 'register.html', {'form': form})

'' 'используйте request.files для добавления изображения в форму' ''

register.html

         <form action="{% url 'register' %}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <div class="body bg-gray">
                <div class="form-group">
                    {{ form.as_p }}
                </div>
            </div>

            <div class="footer">                    

                <button type="submit" class="btn bg-olive btn-block">Sign me up</button>

                <a href="{% url 'login' %}" class="text-center">I already have Account</a>
            </div>
        </form>

'' 'multipart пользователя, чтобы добавить изображение в него' ''

0 голосов
/ 30 сентября 2018

Использовал последнее предложенное решение в том же потоке групп Google, также получил проблему ReferenceError: createImageChooser is not defined js после обновления с Wagtail 2.1 до 2.2

Вот как пошло мое исследование:

Похоже, этот коммит убрал прямое включение медиафайлов из _editor_js.html.

Хорошо, поэтому решение состоит в том, чтобы скопировать старое поведение и получить доступ к Media подклассам виджетов

Сначала я попытался добавить те же самые удаленные строки в свой собственный файл edit.html в {% block extra_js %}. Не работал.

Похоже, что некоторые представления возвращают edit_handler, например здесь . Пользователь не видит.

Пользовательское представление, однако, предоставляет переменную формы как для создания, так и для редактирования. Давайте использовать это.

И окончательным решением для меня было изменение блока extra_js в edit.html следующим образом:

{% block extra_js %}
    {{ block.super }}
    {% include 'wagtailadmin/pages/_editor_js.html' %}
    {{ form.media.js }}
{% endblock extra_js %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...