def get_fields_html(): # TODO: Django >1.4: # return format_html_join('\n', '<option value="{0}">{1}</option>', # (df for df in choices)) choices = sorted(registry.get_as_choices(), key=lambda x: x[1]) return mark_safe('\n'.join('<option value="{0}">{1}</option>'.format( conditional_escape(df[0]), conditional_escape(df[1])) for df in choices))
def test_get_default_actions_as_choices(self): choices = sorted(registry.get_as_choices(), key=lambda x: x[1]) self.assertEqual(choices, [ (self.key % 'BooleanField', 'Boolean'), (self.key % 'ChoiceField', 'Choices'), (self.key % 'DateField', 'Date'), (self.key % 'DateTimeField', 'Date and Time'), (self.key % 'EmailField', 'Email'), (self.key % 'IntegerField', 'Integer'), (self.key % 'MultiLineTextField', 'Multi Line Text'), (self.key % 'SingleLineTextField', 'Single Line Text'), (self.key % 'TimeField', 'Time'), ])
def get_fields_html(): # TODO: Django >1.4: # return format_html_join('\n', '<option value="{0}">{1}</option>', # (df for df in choices)) choices = sorted(registry.get_as_choices(), key=lambda x: x[1]) return mark_safe( '\n'.join( '<option value="{0}">{1}</option>'.format( conditional_escape(df[0]), conditional_escape(df[1]) ) for df in choices ) )
class FormFieldModel(models.Model): parent_form = models.ForeignKey(FormModel, on_delete=models.CASCADE, related_name='fields') field_type = models.CharField(_('Type'), max_length=255, choices=formfield_registry.get_as_choices()) label = models.CharField(_('Label'), max_length=255) name = models.SlugField(_('Name'), max_length=50, blank=True) _options = models.TextField(_('Options'), blank=True, null=True) position = models.SmallIntegerField(_('Position'), blank=True, default=0) class Meta: ordering = ['parent_form', 'position'] unique_together = ( "parent_form", "name", ) verbose_name = _('Form field') verbose_name_plural = _('Form fields') def __str__(self): return _('Field “%(field_name)s” in form “%(form_name)s”') % { 'field_name': self.label, 'form_name': self.parent_form.name, } def generate_form_field(self, form): field_type_cls = formfield_registry.get(self.field_type) field = field_type_cls(**self.get_form_field_kwargs()) field.contribute_to_form(form) return field def get_form_field_kwargs(self): kwargs = self.options kwargs.update({ 'name': self.name, 'label': self.label, }) return kwargs @property def options(self): """Options passed to the form field during construction.""" if not hasattr(self, '_options_cached'): self._options_cached = {} if self._options: try: self._options_cached = json.loads(self._options) except ValueError: pass return self._options_cached @options.setter def options(self, opts): if hasattr(self, '_options_cached'): del self._options_cached self._options = json.dumps(opts) def save(self, *args, **kwargs): if not self.name: self.name = slugify(self.label) given_options = self.options field_type_cls = formfield_registry.get(self.field_type) invalid = set(self.options.keys()) - set(field_type_cls._meta.keys()) if invalid: for key in invalid: del given_options[key] self.options = given_options super(FormFieldModel, self).save(*args, **kwargs)
class EventField(models.Model): event = models.ForeignKey(Event, verbose_name=u'通知', on_delete=models.CASCADE, related_name='fields') field_type = models.CharField('字段类型', max_length=255, choices=formfield_registry.get_as_choices()) label = models.CharField('显示名称', max_length=20) name = models.SlugField('字段名称', max_length=50, blank=True) _options = models.TextField('选项', blank=True, null=True) position = models.SmallIntegerField('显示位置', blank=True, default=0) class Meta: ordering = ['event', 'position'] unique_together = ( "event", "name", ) verbose_name = '通知字段' verbose_name_plural = verbose_name def __str__(self): return self.label def generate_form_field(self, form): field_type_cls = formfield_registry.get(self.field_type) field = field_type_cls(**self.get_form_field_kwargs()) field.contribute_to_form(form) return field def get_form_field_kwargs(self): kwargs = self.options kwargs.update({ 'name': self.name, 'label': self.label, }) return kwargs @property def options(self): """Options passed to the form field during construction.""" if not hasattr(self, '_options_cached'): self._options_cached = {} if self._options: try: self._options_cached = json.loads(self._options) except ValueError: pass return self._options_cached @options.setter def options(self, opts): if hasattr(self, '_options_cached'): del self._options_cached self._options = json.dumps(opts) def save(self, *args, **kwargs): if not self.name: self.name = slugify(self.label) given_options = self.options field_type_cls = formfield_registry.get(self.field_type) invalid = set(self.options.keys()) - set(field_type_cls._meta.keys()) if invalid: for key in invalid: del given_options[key] self.options = given_options super(EventField, self).save(*args, **kwargs)
def get_fields_html(): choices = sorted(registry.get_as_choices(), key=lambda x: x[1]) return format_html_join('\n', '<option value="{0}">{1}</option>', (df for df in choices))
def get_fields_html(): choices = sorted(registry.get_as_choices(), key=lambda x: x[1]) return format_html_join('\n', '<option value="{0}">{1}</option>', (df for df in choices) )