File: forms.py

package info (click to toggle)
flask-peewee 3.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,136 kB
  • sloc: javascript: 9,322; python: 3,904; makefile: 135; sh: 16
file content (39 lines) | stat: -rw-r--r-- 1,407 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from peewee import BooleanField

from wtforms import widgets
from wtfpeewee.fields import BooleanSelectField
from wtfpeewee.fields import ModelSelectField
from wtfpeewee.orm import ModelConverter


class BaseModelConverter(ModelConverter):
    def __init__(self, *args, **kwargs):
        super(BaseModelConverter, self).__init__(*args, **kwargs)
        self.converters[BooleanField] = self.handle_boolean

    def handle_boolean(self, model, field, **kwargs):
        return field.name, BooleanSelectField(**kwargs)


class ChosenAjaxSelectWidget(widgets.Select):
    def __init__(self, data_source, data_param, *args, **kwargs):
        self.data_source = data_source
        self.data_param = data_param
        super(ChosenAjaxSelectWidget, self).__init__(*args, **kwargs)

    def __call__(self, field, **kwargs):
        if field.allow_blank and not self.multiple:
            kwargs['data-role'] = u'ajax-chosenblank'
        else:
            kwargs['data-role'] = u'ajax-chosen'
        kwargs['data-source'] = self.data_source
        kwargs['data-param'] = self.data_param
        kwargs['data-placeholder'] = 'Type to search...'

        return super(ChosenAjaxSelectWidget, self).__call__(field, **kwargs)


class LimitedModelSelectField(ModelSelectField):
    def iter_choices(self):
        for obj in self.query.limit(20):
            yield (obj._pk, self.get_label(obj), obj == self.data)