def get_widget_params_form(self, wizard): data = wizard.get_cleaned_data_for_step(wizard.steps.first) widget_type = data['widget_type'] widget = widget_manager.get(widget_type) fields = copy.deepcopy(widget.base_fields) if 'id' in fields: del fields['id'] return DeclarativeFieldsMetaclass("WidgetParamsForm", (forms.Form,), fields)
def __new__(cls, name, bases, attrs): attrs['Meta'] = attrs.get('Meta', type(name + '.Meta', (object,), {})) if hasattr(attrs['Meta'], 'model'): new_class = ModelFormMetaclass.__new__(cls, name, bases + (DjangoModelForm,), attrs) new_class._base_form = DjangoModelForm else: new_class = DeclarativeFieldsMetaclass.__new__(cls, name, bases + (DjangoForm,), attrs) new_class._base_form = DjangoForm return new_class
def get_slice_params_form(self, wizard): data = wizard.get_cleaned_data_for_step(wizard.steps.prev) slice_type = data['slice_type'] slice = slice_manager.get(slice_type) fields = copy.deepcopy(slice.base_fields) if 'id' in fields: del fields['id'] if 'title' in fields: del fields['title'] logger.debug(fields) return DeclarativeFieldsMetaclass("SliceParamsForm", (forms.Form, ), fields)
def __new__(cls, name, bases, attrs): # add dynamicfields to attrs dynamic_field_weight = {} for relation in attrs['_dynamicform'].dynamicformfieldrelation_set.order_by('sort_weight').all(): dynamic_field_weight[relation.field_name] = relation.sort_weight if relation.dynamicfield: attrs[relation.field_name] = relation.dynamicfield.field_class # construct the form class result = DeclarativeFieldsMetaclass.__new__(cls, name, bases, attrs) # customize order of fields field_weight = dict((field_name, -1000 + i) for base in bases for i, field_name in enumerate(base.base_fields)) field_weight.update(dynamic_field_weight) result.base_fields.keyOrder = [field for (field, i) in sorted(field_weight.items(), key=lambda (f, i): i)] return result
def csv_processor_factory(app_name, model_name, csv_filename): """ factory for Model specific CSVPRocessorForm """ rows = [] fd = open(csv_filename, 'rb') dialect = csv.Sniffer().sniff(fd.read(2048)) fd.seek(0) csv_reader = csv.reader(fd, dialect=dialect) for i in range(10): rows.append(csv_reader.next()) fd.close() columns_count = len(rows[0]) model = get_model(app_name, model_name) model_fields = [('', '-- ignore --')] + [(f.name, f.name) for f in model._meta.fields] columns_def = [(-1, '-- ignore --')] + [(i, "Column %s" % i) for i in range(columns_count)] class_name = "%s%sImportForm" % (app_name, model_name) attrs = { # 'header': BooleanField(label='Header', initial=False, required=False), # 'validate': BooleanField(label='Form validation', initial=False, required=False), # 'preview_all': BooleanField(label='Preview all records', initial=False, required=False), # 'create_missing': BooleanField(label='Create missing rows', initial=False, required=False), 'columns_count': columns_count, 'sample': rows, '_model': model, '_fields': model._meta.fields, '_filename': csv_filename, '_dialect': dialect } for i, f in enumerate(model._meta.fields): # column, field, regex to manipulate column value, lookup field name for foreign-keys, primary key flag attrs['col_%s' % i] = ColumnField(choices=columns_def, required=False) attrs['fld_%s' % i] = ChoiceField(choices=model_fields, required=False) attrs['rex_%s' % i] = RegexField(label='', initial='(.*)', required=False) attrs['lkf_%s' % i] = CharField(required=False) attrs['key_%s' % i] = BooleanField(label='', initial=False, required=False) return DeclarativeFieldsMetaclass(str(class_name), (CSVPRocessorForm, ), attrs)
def graph_form_factory(model): app_name = model._meta.app_label model_name = model.__name__ model_fields = [(f.name, f.verbose_name) for f in model._meta.fields if not f.primary_key] graphs = [('PieChart', 'PieChart'), ('BarChart', 'BarChart')] model_fields.insert(0, ('', 'N/A')) class_name = "%s%sGraphForm" % (app_name, model_name) attrs = {'initial': {'app': app_name, 'model': model_name}, '_selected_action': CharField(widget=MultipleHiddenInput), 'select_across': BooleanField(initial='0', widget=HiddenInput, required=False), 'app': CharField(initial=app_name, widget=HiddenInput), 'model': CharField(initial=model_name, widget=HiddenInput), 'graph_type': ChoiceField(label="Graph type", choices=graphs, required=True), 'axes_x': ChoiceField(label="Group by and count by", choices=model_fields, required=True)} return DeclarativeFieldsMetaclass(str(class_name), (Form,), attrs)