def get_multipartite_form(multi_type, user): 'It returns a form for the given multipartite' form_fields = OrderedDict() part_defs = PARTS_TO_ASSEMBLE[multi_type] for parts in part_defs: features = Feature.objects.filter(type__name=parts[0], prefix=parts[1], suffix=parts[2]) features = filter_feature_by_user_perms(features, user) choices = features_to_choices(features) name = parts[0] form_fields[name] = forms.CharField(max_length=100, widget=Select(choices=choices)) # last we need to add the vector to the form vector_choices = get_vector_choices(user) form_fields[VECTOR_TYPE_NAME] = forms.CharField(max_length=100, widget=Select(choices=vector_choices)) form = type('MultiPartiteForm', (forms.BaseForm,), {'base_fields': form_fields}) for field_name in form_fields.keys(): setattr(form, 'clean_{0}'.format(field_name), create_feature_validator(field_name)) return form
def get_multipartite_free_form(feat_uniquenames): form_fields = OrderedDict() count = 0 for feat_uniquename in feat_uniquenames: if count == 0: part_name = 'vector' else: part_name = 'part_{0}'.format(count) field = forms.CharField(required=True, initial=feat_uniquename) field.widget.attrs['readonly'] = True form_fields[part_name] = field count += 1 form = type('MultiPartiteFreeValForm', (forms.BaseForm,), {'base_fields': form_fields}) for field_name in form_fields.keys(): setattr(form, 'clean_{0}'.format(field_name), create_feature_validator(field_name)) return form
def clean_vector(self): return create_feature_validator('vector')(self)
def clean_part_2(self): return create_feature_validator('part_2')(self)