From 2045386f7d09df9716f81ab523ffb619d8c6c887 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 19 Nov 2014 01:15:11 +0100 Subject: group_change: add form/template/view to change a group --- forms.py | 9 +++++++-- templates/group_change.html | 25 +++++++++++++++++++++++++ utils.py | 10 +++++++++- views.py | 19 ++++++++++++++++++- widgets.py | 9 +++++++++ 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 templates/group_change.html diff --git a/forms.py b/forms.py index c19a699..ef8ab65 100644 --- a/forms.py +++ b/forms.py @@ -1,8 +1,8 @@ from wtforms import HiddenField, validators -from utils import Unique from models import Group -from wtfpeewee.orm import model_form +from wtfpeewee.orm import model_form, ModelConverter from flask.ext.wtf import Form +from utils import Unique, ReadonlyField from widgets import TextArea @@ -19,6 +19,11 @@ CreateGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args= 'description': {'widget': TextArea(rows=7)}}) +ChangeGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args={ + 'description': {'widget': TextArea(rows=7)}}, + converter=ModelConverter(overrides={'name': ReadonlyField})) + + class DeleteGroup(Form): id = HiddenField('group id', [validators.Required()]); sure = HiddenField('are you sure'); diff --git a/templates/group_change.html b/templates/group_change.html new file mode 100644 index 0000000..9b95315 --- /dev/null +++ b/templates/group_change.html @@ -0,0 +1,25 @@ +{% extends "layout.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block head %}Group: {{group}}{% endblock %} + +{% block content %} +
+
+

Edit this group

+
+ +
+
+ {% for field in change_form %} + {{ render_field(field) }} + {% endfor %} +
+
+ +
+
+
+
+
+{% endblock %} diff --git a/utils.py b/utils.py index f414d1b..fbec4c9 100644 --- a/utils.py +++ b/utils.py @@ -1,6 +1,7 @@ from functools import wraps from flask import request, render_template -from wtforms import ValidationError +from wtforms import Field, ValidationError +from widgets import Static # using http://flask.pocoo.org/docs/patterns/viewdecorators/ def templated(template=None): @@ -35,3 +36,10 @@ class Unique(object): raise ValidationError(self.message) except self.model.DoesNotExist: pass + + +class ReadonlyField(Field): + widget = Static() + + def process_formdata(self, _): + pass diff --git a/views.py b/views.py index 7edb0f2..d881d21 100644 --- a/views.py +++ b/views.py @@ -3,7 +3,7 @@ from auth import auth from flask import g, request, redirect, render_template, url_for from flask_peewee.utils import get_object_or_404 from models import Group, Member -from forms import CreateGroup, DeleteGroup +from forms import CreateGroup, DeleteGroup, ChangeGroup from utils import templated from filters import * @@ -41,3 +41,20 @@ def group(group_name): else: form.id.data = group.id return {'group': group, 'members': group.members, 'delete_form': form} + + +@app.route('//_change/', methods=['GET', 'POST']) +@templated('group_change.html') +@auth.login_required +def group_change(group_name): + group = get_group_or_404(Group.name == group_name, Member.admin == True) + form = ChangeGroup(request.form, obj=group) + if form.validate_on_submit(): + del form.name + form.populate_obj(group) + group.save() + return redirect(url_for('group', group_name=group.name)) + return {'group': group, + 'change_form': form, + 'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group}, + {'text': 'Edit group'}]} diff --git a/widgets.py b/widgets.py index 77f3650..3e5d2b8 100644 --- a/widgets.py +++ b/widgets.py @@ -1,6 +1,15 @@ import wtforms.widgets.core +class Static(object): + def __call__(self, field, **kwargs): + kwargs.setdefault('id', field.id) + if kwargs['class_'] == 'form-control': + kwargs['class_'] = 'form-control-static' + html = ['

' % wtforms.widgets.core.html_params(**kwargs), field.data,'

'] + return wtforms.widgets.core.HTMLString(''.join(html)) + + class TextArea(wtforms.widgets.core.TextArea): def __init__(self, **kwargs): self.kwargs = kwargs -- cgit v1.2.3-1-g7c22