diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-19 01:15:11 +0100 |
---|---|---|
committer | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-19 02:15:56 +0100 |
commit | 2045386f7d09df9716f81ab523ffb619d8c6c887 (patch) | |
tree | 569ab4414e4e3d0a3ee0e7e6bf6ac63e8b277fb8 | |
parent | 2e7f70591ddc2e73be3e9d426ceaffaf3df0b9c2 (diff) | |
download | padlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.tar.gz padlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.tar.bz2 padlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.zip |
group_change: add form/template/view to change a group
-rw-r--r-- | forms.py | 9 | ||||
-rw-r--r-- | templates/group_change.html | 25 | ||||
-rw-r--r-- | utils.py | 10 | ||||
-rw-r--r-- | views.py | 19 | ||||
-rw-r--r-- | widgets.py | 9 |
5 files changed, 68 insertions, 4 deletions
@@ -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 %} +<div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Edit this group</h3> + </div> + + <div class="panel-body"> + <form class="form-horizontal" role="form" method="POST"> + {% for field in change_form %} + {{ render_field(field) }} + {% endfor %} + <div class="form-group"> + <div class="col-lg-10 col-lg-offset-2"> + <button type="submit" class="btn btn-primary">Save group</button> + </div> + </div> + </form> + </div> +</div> +{% endblock %} @@ -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 @@ -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('/<group_name>/_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'}]} @@ -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 = ['<p %s>' % wtforms.widgets.core.html_params(**kwargs), field.data,'</p>'] + return wtforms.widgets.core.HTMLString(''.join(html)) + + class TextArea(wtforms.widgets.core.TextArea): def __init__(self, **kwargs): self.kwargs = kwargs |