示例#1
0
 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)
示例#2
0
文件: forms.py 项目: hollow/nepal
 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
示例#3
0
 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)
示例#4
0
 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
示例#5
0
 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
示例#6
0
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)
示例#7
0
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)