def convert(self, model, field, field_args): kwargs = { 'label': field.verbose_name, 'validators': [], 'filters': [], 'default': field.default, 'description': field.help_text } if field_args: kwargs.update(field_args) if kwargs['validators']: # Create a copy of the list since we will be modifying it. kwargs['validators'] = list(kwargs['validators']) if field.null: # Treat empty string as None when converting. kwargs['filters'].append(handle_null_filter) if (field.null or (field.default is not None)) and not field.choices: # If the field can be empty, or has a default value, do not require # it when submitting a form. kwargs['validators'].append(validators.Optional()) else: if isinstance(field, self.required): kwargs['validators'].append(validators.Required()) if field.name in self.overrides: return FieldInfo(field.name, self.overrides[field.name](**kwargs)) for converter in self.converters: if isinstance(field, converter): return self.converters[converter](model, field, **kwargs) else: for converter in self.defaults: if isinstance(field, converter): if issubclass(self.defaults[converter], f.FormField): # FormField fields (i.e. for nested forms) do not support # filters. kwargs.pop('filters') if field.choices or 'choices' in kwargs: choices = kwargs.pop('choices', field.choices) if converter in self.coerce_settings or 'coerce' in kwargs: coerce_fn = kwargs.pop( 'coerce', self.coerce_settings[converter]) allow_blank = kwargs.pop('allow_blank', field.null) kwargs.update({ 'choices': choices, 'coerce': coerce_fn, 'allow_blank': allow_blank }) return FieldInfo(field.name, SelectChoicesField(**kwargs)) return FieldInfo(field.name, self.defaults[converter](**kwargs)) raise AttributeError("There is not possible conversion " "for '%s'" % type(field))
def convert(self, model, field, field_args): kwargs = dict( label=field.verbose_name, validators=[], filters=[], default=field.default, description=field.help_text, ) if field_args: kwargs.update(field_args) if field.null: kwargs['filters'].append(handle_null_filter) elif field.default is not None: kwargs['validators'].append(validators.Optional()) else: if isinstance(field, self.required): kwargs['validators'].append(validators.Required()) field_class = type(field) if field_class in self.converters: return self.converters[field_class](model, field, **kwargs) elif field_class in self.defaults: if field.choices or 'choices' in kwargs: choices = kwargs.pop('choices', field.choices) if field_class in self.coerce_settings or 'coerce' in kwargs: coerce_fn = kwargs.pop('coerce', self.coerce_settings[field_class]) allow_blank = kwargs.pop('allow_blank', field.null) kwargs.update( dict(choices=choices, coerce=coerce_fn, allow_blank=allow_blank)) return field.name, SelectChoicesField(**kwargs) return field.name, self.defaults[field_class](**kwargs)
def convert(self, model, field, field_args): kwargs = { 'label': field.verbose_name, 'validators': [], 'filters': [], 'default': field.default, 'description': field.help_text } if field_args: kwargs.update(field_args) if kwargs['validators']: # Create a copy of the list since we will be modifying it. kwargs['validators'] = list(kwargs['validators']) if field.null: # Treat empty string as None when converting. kwargs['filters'].append(handle_null_filter) if (field.null or (field.default is not None)) or ( field.choices and any(not (v) for v, _ in field.choices)): # We allow the field to be optional if: # 1. the field is null=True and can be blank. # 2. the field has a default value. kwargs['validators'].append(validators.Optional()) else: kwargs['validators'].append(ValueRequired()) if field.name in self.overrides: return FieldInfo(field.name, self.overrides[field.name](**kwargs)) # Allow custom-defined Peewee field classes to define their own conversion, # making it so that code which calls model_form() doesn't have to have special # cases, especially when called for the same peewee.Model from multiple places, or # when called in a generic context which the end-developer has less control over, # such as via flask-admin. if hasattr(field, 'wtf_field'): return FieldInfo(field.name, field.wtf_field(model, **kwargs)) for converter in self.converters: if isinstance(field, converter): return self.converters[converter](model, field, **kwargs) else: for converter in self.defaults: if not isinstance(field, converter): # Early-continue because it simplifies reading the following code. continue if issubclass(self.defaults[converter], f.FormField): # FormField fields (i.e. for nested forms) do not support # filters. kwargs.pop('filters') if field.choices or 'choices' in kwargs: choices = kwargs.pop('choices', field.choices) if converter in self.coerce_settings or 'coerce' in kwargs: coerce_fn = kwargs.pop('coerce', self.coerce_settings[converter]) allow_blank = kwargs.pop('allow_blank', field.null) kwargs.update({ 'choices': choices, 'coerce': coerce_fn, 'allow_blank': allow_blank }) return FieldInfo(field.name, SelectChoicesField(**kwargs)) return FieldInfo(field.name, self.defaults[converter](**kwargs)) raise AttributeError("There is not possible conversion " "for '%s'" % type(field))