Created
July 4, 2015 07:58
-
-
Save tsuyukimakoto/675650936f59a2306133 to your computer and use it in GitHub Desktop.
Set selected wtforms.ext.sqlalchemy.fields.QuerySelectField.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/wtforms/ext/sqlalchemy/fields.py b/wtforms/ext/sqlalchemy/fields.py | |
index 286dada..6c1a40e 100644 | |
--- a/wtforms/ext/sqlalchemy/fields.py | |
+++ b/wtforms/ext/sqlalchemy/fields.py | |
@@ -56,9 +56,10 @@ class QuerySelectField(SelectFieldBase): | |
def __init__(self, label=None, validators=None, query_factory=None, | |
get_pk=None, get_label=None, allow_blank=False, | |
- blank_text='', **kwargs): | |
+ blank_text='', coerce=None, **kwargs): | |
super(QuerySelectField, self).__init__(label, validators, **kwargs) | |
self.query_factory = query_factory | |
+ self.coerce = coerce | |
if get_pk is None: | |
if not has_identity_key: | |
@@ -105,7 +106,8 @@ class QuerySelectField(SelectFieldBase): | |
yield ('__None', self.blank_text, self.data is None) | |
for pk, obj in self._get_object_list(): | |
- yield (pk, self.get_label(obj), obj == self.data) | |
+ yield (pk, self.get_label(obj), obj == self.data or | |
+ (self.coerce is not None and self.coerce(pk) == self.data)) | |
def process_formdata(self, valuelist): | |
if valuelist: | |
@@ -138,7 +140,7 @@ class QuerySelectMultipleField(QuerySelectField): | |
""" | |
widget = widgets.Select(multiple=True) | |
- def __init__(self, label=None, validators=None, default=None, **kwargs): | |
+ def __init__(self, label=None, validators=None, default=None, coerce=None, **kwargs): | |
if default is None: | |
default = [] | |
super(QuerySelectMultipleField, self).__init__(label, validators, default=default, **kwargs) | |
@@ -146,6 +148,7 @@ class QuerySelectMultipleField(QuerySelectField): | |
import warnings | |
warnings.warn('allow_blank=True does not do anything for QuerySelectMultipleField.') | |
self._invalid_formdata = False | |
+ self.coerce = None | |
def _get_data(self): | |
formdata = self._formdata | |
@@ -170,7 +173,8 @@ class QuerySelectMultipleField(QuerySelectField): | |
def iter_choices(self): | |
for pk, obj in self._get_object_list(): | |
- yield (pk, self.get_label(obj), obj in self.data) | |
+ yield (pk, self.get_label(obj), obj in self.data or | |
+ (self.coerce is not None and self.coerce(pk) in self.data)) | |
def process_formdata(self, valuelist): | |
self._formdata = set(valuelist) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Why are you not created PR to WTForms-Alchemy as you advised pallets-eco/wtforms#202?