Skip to content

Instantly share code, notes, and snippets.

View lb-'s full-sized avatar

LB (Ben Johnston) lb-

View GitHub Profile
@lb-
lb- / models.py
Created September 3, 2017 12:02
Wagtail Forms - Upload Image Field - Extend AbstractFormField Class
from wagtail.wagtailforms.models import AbstractFormField, FORM_FIELD_CHOICES
class FormField(AbstractFormField):
FORM_FIELD_CHOICES = list(FORM_FIELD_CHOICES) + [('image', 'Upload Image')]
field_type = models.CharField(
verbose_name=_('field type'),
max_length=16,
choices=FORM_FIELD_CHOICES)
page = ParentalKey('FormPage', related_name='form_fields')
@lb-
lb- / models.py
Created September 3, 2017 12:08
Wagtail Forms - Upload Image Field - Extend FormBuilder Class
from wagtail.wagtailforms.forms import FormBuilder
from wagtail.wagtailimages.fields import WagtailImageField
class ExtendedFormBuilder(FormBuilder):
def create_image_upload_field(self, field, options):
return WagtailImageField(**options)
FIELD_TYPES = FormBuilder.FIELD_TYPES
FIELD_TYPES.update({
'image': create_image_upload_field,
})
@lb-
lb- / models.py
Created September 3, 2017 12:11
Wagtail Forms - Upload Image Field - Utilise ExtendedFormBuilder Class
# definition of ExtendedFormBuilder or import from another file above the Formpage class
class FormPage(AbstractEmailForm):
form_builder = ExtendedFormBuilder
# the rest of the form page definition ...
@lb-
lb- / models.py
Created September 3, 2017 12:16
Wagtail Forms - Upload Image Field - Override the Serve Method
class FormPage(AbstractEmailForm):
form_builder = ExtendedFormBuilder # see the step above
def serve(self, request, *args, **kwargs):
if request.method == 'POST':
# form = self.get_form(request.POST, page=self, user=request.user) # Original line
form = self.get_form(request.POST, request.FILES, page=self, user=request.user)
if form.is_valid():
self.process_form_submission(form)
@lb-
lb- / form_page.html
Created September 3, 2017 12:22
Wagtail Forms - Upload Image Field - Add enctype to Form Page View
{% extends "base.html" %}
{% load wagtailcore_tags %}
{% block content %}
{{ self.intro }}
<form action="{% pageurl self %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
@lb-
lb- / models.py
Last active September 3, 2017 12:36
Wagtail Forms - Upload Image Field - Override process_form_submission Method
from wagtail.wagtailimages import get_image_model
class FormPage(AbstractEmailForm):
form_builder = ExtendedFormBuilder # as per step 3
def serve(self, request, *args, **kwargs):
# ... as per step 4
def process_form_submission(self, form):
cleaned_data = form.cleaned_data
@lb-
lb- / models.py
Created September 3, 2017 12:43
Wagtail Forms - Upload Image Field - Final
from wagtail.wagtailforms.models import AbstractFormField, FORM_FIELD_CHOICES
from wagtail.wagtailforms.forms import FormBuilder
from wagtail.wagtailimages.fields import WagtailImageField
def filename_to_title(filename):
from os.path import splitext
if filename:
result = splitext(filename)[0]
result = result.replace('-', ' ').replace('_', ' ')
# Your init script
#
# Atom will evaluate this file each time a new window is opened. It is run
# after packages are loaded/activated and after the previous editor state
# has been restored.
#
# An example hack to log to the console when each text editor is saved.
#
# atom.workspace.observeTextEditors (editor) ->
# editor.onDidSave ->
@lb-
lb- / final_models.py
Last active March 28, 2023 17:20
Django + Wagtail - custom taxonomy model
"""Node model and Node admin interaction."""
from django import forms
from django.conf.urls import url
from django.contrib.admin.utils import quote, unquote
from django.core.exceptions import PermissionDenied
from django.core.validators import MinLengthValidator, RegexValidator
from django.db import models
from django.shortcuts import get_object_or_404
from django.template.loader import render_to_string
@lb-
lb- / settings.rst
Last active May 9, 2018 09:14
Wagtail - WIP - Documentation of settings