Пример #1
0
    def __str__(self):

        encoder = ExtComponentEncoder(ensure_ascii=False, indent=" " * 4)
        # 'DeJSONize' output by removing " around array keys
        str = dejsonize(encoder.encode(self.params))

        if self.as_class:
            return "Ext.define('%s', {\n    extend: '%s',%s});" % (self.name, self.class_name, str.strip("{}"))
        else:
            return str
Пример #2
0
def convert(klass):
    model_name = klass.__name__

    fields = list()
    validators = list()

    for field in klass._meta._fields():

        field_class = field.__class__.__name__

        ext_type = FIELD_TYPES[field_class]

        field_dict = {
            'name': field.name,
            'type': ext_type
        }

        if ext_type == 'date':
            field_dict['dateFormat'] = 'timestamp'

        if hasattr(field, "default"):
            if field.default != NOT_PROVIDED:
                field_dict["defaultValue"] = field.default

        fields.append(field_dict)

        if hasattr(field, "max_length") and field.max_length:
            validators.append({'type': 'length', 'field': field.name, 'max': field.max_length})

        if hasattr(field, "_get_choices"):
            choices = field._get_choices()

            if len(choices):
                validators.append({'type': 'inclusion', 'field': field.name, 'list': [choice[1] for choice in choices]})

        if hasattr(field, "_get_choices") and not field.blank:
            validators.append({'type': 'presence', 'field': field.name})

    model = OrderedDict()
    model['extend'] = 'Ext.data.Model'
    model['fields'] = fields
    model['validations'] = validators

    model_str = """Ext.define('%(model_name)s', %(model)s);""" % {
        'model_name': model_name,
        'model': json.dumps(model, ensure_ascii=False, indent=" " * 4)
    }

    return dejsonize(model_str)