class SiteForm(ModelForm): status_code_list = list( map(lambda status: status["code"], http_status_list)) status_list = MultipleChoiceField(choices=status_code_list, required=True) class Meta: model = Site fields = ["owner", "name", "url", "status_list"]
class SecretRoleInfoForm(SelectRoleForm): conference = ModelMultipleChoiceField( queryset=Conference.objects.all().order_by('conference_name'), widget=MultipleHiddenInput(), required=True) roles = MultipleChoiceField(widget=MultipleHiddenInput(), required=True, choices=role_options)
class _ExampleForm(Form): single = ChoiceField(choices=((1, 'one'), (2, 'two'), (3, 'three')), required=False) multi = MultipleChoiceField( choices=((1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')), required=False, )
def __init__(self, required=True, widget=None, label=None, initial=None): fields = ( CharField(), MultipleChoiceField(choices=beatles), SplitDateTimeField(), ) super(ComplexField, self).__init__(fields, required, widget, label, initial)
def set_choices(self, notes): choices = tuple([(note.id, str(note)) for note in notes]) lbl = 'Select some notes to interact with.' widget = CheckboxSelectMultiple() self.fields['picked'] = MultipleChoiceField(label=lbl, choices=choices, widget=widget, required=False)
def formfield(self, **kwargs): plugins = ((v, v) for v in get_plugins_by_feature(self.features)) required = not self.null return MultipleChoiceField( required=required, choices=plugins, widget=CheckboxSelectMultiple, )
class BillAPIGetForm(Form): choices = ( ("user", "user"), ("amount", "amount"), ("date", "date"), ("info", "info"), ) column = MultipleChoiceField(choices=choices)
class ShoppingListSelect(forms.Form): ingredients = MultipleChoiceField(choices=('', ''), widget=CheckboxSelectMultiple, required=False) def __init__(self, choices=('', ''), *args, **kwargs): super(ShoppingListSelect, self).__init__(*args, **kwargs) self.fields['ingredients'].choices = choices
class CourseInstanceAPIGetForm(Form): choices = ( ("course", "course"), ("student", "student"), ("teacher", "teacher"), ("quota", "quota"), ) column = MultipleChoiceField(choices=choices)
def __init__(self, possible_reviewers, default_conflict_reviewers, *args, **kwargs): super(SubmitForm, self).__init__(*args, **kwargs) choices = [] for r in possible_reviewers: choices.append((r.username, r)) self.fields['conflicts'] = MultipleChoiceField(widget=CheckboxSelectMultiple(), required=False, choices=choices, initial=list(default_conflict_reviewers))
class CouponCodeListAPIGetForm(Form): offset = IntegerField(initial=1, required=False) limit = IntegerField(initial=10, required=False) choices = ( ("code", "code"), ("discount", "discount"), ) column = MultipleChoiceField(choices=choices)
def __init__(self, *args, **kwargs): self.request = kwargs.pop( 'request', None ) # pop() removes and returns an element from a dictionary, second argument is default when not found super(UserAddForm, self).__init__(*args, **kwargs) self.request_user = self.request.user self.request_user_company = None if self.request_user.company: self.request_user_company = self.request_user.company # --- field 'last_name' # field 'first_name' is not in use self.fields['last_name'] = CharField( max_length=c.NAME_MAX_LENGTH, required=True, label=_('Full name'), help_text=_('Required, %(len)s characters or fewer.') % {'len': c.NAME_MAX_LENGTH}, ) # --- field 'Role_list' # request.user with role=School: role = request.user.role, field is disabled # request.user with role=Insp can set role=Insp and role=School # request.user with role=System can set all roles # PR2018-08-04 self.choices = [ (c.ROLE_01_COMPANY, _('Company')), ] if self.request_user.is_role_system: self.choices.append((c.ROLE_02_SYSTEM, _('System'))) self.fields['role_list'] = ChoiceField( required=True, # choises must be tuple or list, dictionary gives error: 'int' object is not iterable choices=self.choices, label=_('Organization'), initial=self.request_user.role) self.fields[ 'role_list'].disabled = not self.request_user.is_role_system # --- field 'Permits' # permits_choices_tuple: ((1, 'Read'), (2, 'Write'), (4, 'Authorize'), (8, 'Admin')) self.fields['permit_list'] = MultipleChoiceField( required=False, widget=SelectMultiple, choices=self.request_user. permits_choices, # choises must be tuple or list, dictionary gives error: 'int' object is not iterable label='Permissions', help_text= _('Select one or more permissions from the list. Press the Ctrl button to select multiple permissions.' ), initial=c.PERMIT_01_READ) # --- remove fields 'password1' self.fields.pop('password1') self.fields.pop('password2')
class SummerActForm(SummerActDraftForm): shows_preferences = MultipleChoiceField( widget=CheckboxSelectMultiple, choices=more_shows_options, label=act_bid_labels['summer_shows_preferences'], help_text=act_help_texts['shows_preferences']) act_duration = DurationField(required=True, help_text=summer_help_texts['act_duration'])
class PluginUpdateForm(Form): jails = MultipleChoiceField(required=True) def __init__(self, *args, **kwargs): oid = kwargs.pop('oid') super(PluginUpdateForm, self).__init__(*args, **kwargs) plugins = get_installed_plugins_by_remote_oid(oid) self.fields['jails'].choices = [(p.plugin_jail, p.plugin_jail) for p in plugins]
class QuestionForm(ModelForm): myfield = MultipleChoiceField(choices=['a', 'b'], widget=SelectMultiple) class Meta: model = Question fields = ( 'question_text', 'pub_date', )
def test_multiplechoicefield_changed(self): f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two'), ('3', 'Three')]) self.assertFalse(f.has_changed(None, None)) self.assertFalse(f.has_changed([], None)) self.assertTrue(f.has_changed(None, ['1'])) self.assertFalse(f.has_changed([1, 2], ['1', '2'])) self.assertFalse(f.has_changed([2, 1], ['1', '2'])) self.assertTrue(f.has_changed([1, 2], ['1'])) self.assertTrue(f.has_changed([1, 2], ['1', '3']))
class RedemptionCodeListAPIGetForm(Form): offset = IntegerField(initial=1, required=False) limit = IntegerField(initial=10, required=False) choices = ( ("code", "code"), ("amount", "amount"), ("is_available", "is_available"), ) column = MultipleChoiceField(choices=choices)
class DatasetForm(ModelForm): selected_poses = MultipleChoiceField(choices=TOKEN_POS['ko'], widget=FilteredSelectMultiple(is_stacked=False, verbose_name=_('POS'))) def __init__(self, *args, **kwargs): super(DatasetForm, self).__init__(*args, **kwargs) self.fields['removed_nicknames_keywords'].required = False self.fields['date'].required = False self.fields['result_dir'].required = False self.fields['status'].required = False self.fields['status_training'].required = False self.fields['selected_poses'].label = _('Selected POS') def clean_original_file(self): original_file = self.cleaned_data['original_file'] try: df = pd.read_excel(original_file, index_col=0) except FileNotFoundError: raise ValidationError(_('File not found'), code='invalid') except PermissionError: raise ValidationError(_('Permission denied'), code='invalid') except XLRDError: raise ValidationError(_('Wrong format - please upload excel file'), code='invalid') if len(df.columns) != 3 or df.columns[0] != 'Date' or df.columns[1] != 'Question' or df.columns[2] != 'Answer': raise ValidationError(_('Wrong format - please check header in your dataset'), code='invalid') if not len(df): raise ValidationError(_('Your dataset file is empty'), code='invalid') return original_file def clean_selected_poses(self): selected_poses = self.cleaned_data['selected_poses'] pos_list = [key for key, value in TOKEN_POS['ko']] for pos in selected_poses: if pos not in pos_list: raise ValidationError(_('Wrong value - %(pos)s is not a valid POS'), params={'pos': pos}) return ','.join(selected_poses) def clean_removed_nicknames_keywords(self): raw_value = self.cleaned_data['removed_nicknames_keywords'] keywords = [] for word in raw_value.split(','): keywords.append(word.strip()) return ','.join(keywords) class Meta: model = Dataset exclude = []
class BillListAPIGetForm(Form): offset = IntegerField(initial=1, required=False) limit = IntegerField(initial=10, required=False) choices = ( ("user", "user"), ("amount", "amount"), ("date", "date"), ("info", "info"), ) column = MultipleChoiceField(choices=choices)
class Meta: model = models.PedidoFijo dias = MultipleChoiceField(required=True, widget=CheckboxSelectMultiple, choices=models.TIPODIAS) fields = ['cliente', 'fecha_inicio', 'fecha_cancelacion', 'dias'] widgets = { 'fecha_inicio': forms.DateInput(attrs={'class': 'datepicker'}), 'fecha_cancelacion': forms.DateInput(attrs={'class': 'datepicker'}) }
class SummerActDraftForm(ActEditDraftForm): shows_preferences = MultipleChoiceField( widget=CheckboxSelectMultiple, choices=more_shows_options, label=summer_bid_label, help_text=summer_help_texts['shows_preferences'], required=False) other_performance = MultipleChoiceField( widget=CheckboxSelectMultiple, choices=summer_other_perf_options, label=act_bid_labels['other_performance'], help_text=act_help_texts['other_performance'], required=False) act_duration = DurationFormField( required=False, help_text=summer_help_texts['act_duration']) track_duration = DurationFormField( required=False, help_text=summer_help_texts['track_duration'], label=act_bid_labels['track_duration'])
class BootstrapPictureFormMixin(ImageFormMixin): responsive_heights = BootstrapMultiSizeField( label=_("Adapt Picture Heights"), required=False, require_all_fields=False, allowed_units=['px', '%'], initial='100%', help_text= _("Heights of picture in percent or pixels for distinct Bootstrap's breakpoints." ), ) responsive_zoom = BootstrapMultiSizeField( label=_("Adapt Picture Zoom"), required=False, require_all_fields=False, allowed_units=['%'], initial=['0%', '0%', '0%', '0%', '0%'], help_text= _("Magnification of picture in percent for distinct Bootstrap's breakpoints." ), ) resize_options = MultipleChoiceField( label=_("Resize Options"), choices=IMAGE_RESIZE_OPTIONS, widget=widgets.CheckboxSelectMultiple, initial=['subject_location', 'high_resolution'], help_text=_("Options to use when resizing the image."), ) image_shapes = MultipleChoiceField(label=_("Image Shapes"), choices=IMAGE_SHAPE_CHOICES, widget=widgets.CheckboxSelectMultiple, initial=['img-fluid']) class Meta: entangled_fields = { 'glossary': [ 'responsive_heights', 'responsive_zoom', 'resize_options', 'image_shapes' ] }
def test_multiplechoicefield(self): e = { "required": "REQUIRED", "invalid_choice": "%(value)s IS INVALID CHOICE", "invalid_list": "NOT A LIST", } f = MultipleChoiceField(choices=[("a", "aye")], error_messages=e) self.assertFormErrors(["REQUIRED"], f.clean, "") self.assertFormErrors(["NOT A LIST"], f.clean, "b") self.assertFormErrors(["b IS INVALID CHOICE"], f.clean, ["b"])
class TagSearchForm(Form): selectedTags = MultipleChoiceField() results_preview = BooleanField() def __init__(self, tags, conn=None, *args, **kwargs): super(TagSearchForm, self).__init__(*args, **kwargs) # Process Tags into choices (lists of tuples) self.fields['selectedTags'].choices = tags self.conn = conn
class OverrideForm(FormOverrideMixIn, Form): single_choices = [ ('A', 'Option A'), ('B', 'Option B'), ('C', 'Option C'), ] multi_choices = [ ('A', 'Include A'), ('B', 'Include B'), ('C', 'Include C'), ] first = CharField(initial='first_value') second = CharField(initial='second_value') generic_field = CharField(initial='original_value') large_comment = CharField(initial='initial large comment', widget=Textarea(attrs={ "rows": 10, "cols": 40 })) small_comment = CharField(widget=Textarea(attrs={"rows": 2, "cols": 10})) simple_comment = CharField(widget=Textarea()) hide_field = CharField(widget=HiddenInput(), initial='hide_data') bool_field = BooleanField(required=False) # single checkbox single_select = ChoiceField( choices=single_choices) # default widget select multi_select = MultipleChoiceField(choices=multi_choices) # SelectMultiple radio_select = ChoiceField(choices=single_choices, widget=RadioSelect) single_check = ChoiceField(choices=single_choices, required=False, widget=CheckboxInput) # single/boolean choice multi_check = MultipleChoiceField(choices=multi_choices, widget=CheckboxSelectMultiple) email_test = EmailField( ) # like CharField, can have: max_length, min_length, and empty_value last = CharField(initial='last_value') test_condition_response = False def condition_alt_test_feature(self): """Methods with condition_<label> return Boolean for when to apply alt_field_info[label] attrs. """ # logic for determining if the alternative attrs should be applied. return self.test_condition_response
class BookingAPIGetForm(Form): choices = ( ("course", "course"), ("start_date", "start_date"), ("end_date", "end_date"), ("teacher", "teacher"), ("student", "student"), ("info", "info"), ) column = MultipleChoiceField(choices=choices)
def __init__(self, *args, **kwargs): super(SurveyForm, self).__init__(*args, **kwargs) surv_id = kwargs['initial'].pop('survey') quest = Questions.objects.filter(survey=surv_id) for q in quest: q_choices = q.get_choices() self.fields["question_%d" % q.pk] = MultipleChoiceField(label=q.question, widget=CheckboxSelectMultiple, choices=q_choices)
def test_multiplechoicefield(self): e = { 'required': 'REQUIRED', 'invalid_choice': '%(value)s IS INVALID CHOICE', 'invalid_list': 'NOT A LIST', } f = MultipleChoiceField(choices=[('a', 'aye')], error_messages=e) self.assertFormErrors(['REQUIRED'], f.clean, '') self.assertFormErrors(['NOT A LIST'], f.clean, 'b') self.assertFormErrors(['b IS INVALID CHOICE'], f.clean, ['b'])
class QuestionForm(forms.ModelForm): #flags对应model.py里PushRule类的flags #https://docs.djangoproject.com/en/1.8/ref/forms/fields/#multiplechoicefield #https://docs.djangoproject.com/en/1.8/ref/forms/widgets/#checkboxselectmultiple #https://docs.djangoproject.com/en/2.2/ref/forms/widgets/#widget #initial决定默认选中哪个 flags = MultipleChoiceField(initial=[ '1', '4', ], choices=[ ('1', 'Sound'), ('2', 'Vibrate'), ('4', 'Light'), ]) form_text = CharField(widget=forms.Textarea) # logger.error('flags.widget:%s'%flags.widget) #ERROR:root:flags.widget:<django.forms.widgets.SelectMultiple object at 0x102679b90> # question_text = models.CharField(max_length=200) # date=models.DateField() # flags = MultipleChoiceField(widget=forms.CheckboxSelectMultiple(attrs={'class':'inline'}), initial='1|2|4', choices=[('1','Sound'),('2','Vibrate'),('4','Light')]) # logger.error('flags.widget:%s'%flags.widget) #ERROR:root:flags.widget:<django.forms.widgets.CheckboxSelectMultiple object at 0x102679cd0> #is_stacked控制上下还是左右样式,label是左侧显示字样,Category123是选择框字样,required必要字段 choices是候选项 # prefer_category = MultipleChoiceField(label='PreferCategory_label', required=False, widget=admin.widgets.FilteredSelectMultiple("Category123",is_stacked=False), initial=['1'],choices=[(c,c) for c in ['1','2']]) # prefer_category = MultipleChoiceField(label='PreferCategory', required=False, choices=[(c,c) for c in ['1','2']]) # logger.error('prefer_category:%s'%prefer_category.widget) # prefer_football = forms.CharField(label='FootballMatch', required=False, help_text='comma split match_ids') # prefer_football = forms.CharField(label='FootballMatch', required=False, widget=forms.TextInput(attrs={'style':'width:80%; margin-right:10px;'}), help_text='comma split match_ids') # logger.error('prefer_football.widget:%s'%prefer_football.widget) #ERROR:root:prefer_football.widget:<django.forms.widgets.TextInput object at 0x10a9b8dd0> class Meta: model = None # model = Question exclude = [] logger.error('meta_mode:%s' % Meta.model) def __init__(self, *args, **kwargs): # logger.error('meta_mode:%s'%self.Meta.model) # logger.error('selflf.meta:%s'%self._meta) super(QuestionForm, self).__init__(*args, **kwargs) # self.initial['prefer_category'] = self.instance.news_tag.get('category',[]) # self.initial['prefer_keyword'] = ','.join(self.instance.news_tag.get('keyword',[])) # self.initial['prefer_football'] = ','.join(self.instance.news_tag.get('football_match',[])) def clean(self): logger.error('self.cleaned_dat:%s' % self.cleaned_data) return self.cleaned_data
class AdHocEmailForm(Form): required_css_class = 'required' error_css_class = 'error' to = MultipleChoiceField(required=True, widget=CheckboxSelectMultiple()) sender = EmailField(required=True, label="From") subject = CharField(widget=TextInput(attrs={'size': '79'})) html_message = CharField(widget=TinyMCE(attrs={ 'cols': 80, 'rows': 30 }), label="Message")