def render(self, context):
     result = ['<script type="text/javascript">']
     self.form = context[self.form]
     self.formcls = self.form.__class__
     try:
         # admin formset
         fields = self.form.form.fields
         prefix = '%s-' % self.form.prefix if self.form.form.prefix else ''
     except AttributeError:
         try:
             # regular form
             fields = self.form.fields
         except AttributeError:
             raise template.TemplateSyntaxError('Form %s has no fields' %
                                                self.form)
         prefix = '%s-' % self.form.prefix if self.form.prefix else ''
     used_fields = {}
     for name, field in fields.items():
         if isinstance(field.widget, widgets.HiddenInput):
             continue
         used_fields[name] = field
     fields = used_fields
     for name, field in fields.items():
         result.append(self.do_field('%s%s' % (prefix, name), field))
     try:
         _prefix = prefix.replace('-', '_')
         result.append(
             LV_EXTRA_SCRIPT % {
                 'prefix': _prefix,
                 'fieldname': 'id_%s%s' % (_prefix, fields.keys()[-1])
             })
     except:
         return ''
     result.append('</script>')
     return '\n\n'.join(filter(None, result))
 def render(self, context):
     result = ['<script type="text/javascript">']
     self.form = context[self.form]
     self.formcls = self.form.__class__
     try:
         # admin formset
         fields = self.form.form.fields
         prefix = '%s-'%self.form.prefix if self.form.form.prefix else ''
     except AttributeError:
         try:
             # regular form
             fields = self.form.fields
         except AttributeError:
             raise template.TemplateSyntaxError('Form %s has no fields'%self.form)
         prefix = '%s-'%self.form.prefix if self.form.prefix else ''
     used_fields = {}
     for name,field in fields.items():
         if isinstance(field.widget, widgets.HiddenInput):
             continue
         used_fields[name] = field
     fields = used_fields
     for name,field in fields.items():
         result.append(self.do_field('%s%s'%(prefix,name),field))
     try:
         _prefix = prefix.replace('-', '_')
         result.append(LV_EXTRA_SCRIPT % {
             'prefix': _prefix,
             'fieldname':'id_%s%s' % (_prefix, fields.keys()[-1])
         })
     except:
         return ''
     result.append('</script>')
     return '\n\n'.join(filter(None,result))
 def render(self, context):
     result = ['<script type="text/javascript">']
     self.form = context[self.form]
     self.formcls = self.form.__class__
     try:
         # admin formset
         fields = self.form.form.fields
         prefix = '%s-' % self.form.prefix if self.form.form.prefix else ''
     except AttributeError:
         try:
             # regular form
             fields = self.form.fields
         except AttributeError:
             raise template.TemplateSyntaxError('Form %s has no fields' %
                                                self.form)
         prefix = '%s-' % self.form.prefix if self.form.prefix else ''
     for name, field in fields.items():
         result.append(self.do_field('%s%s' % (prefix, name), field))
     try:
         result.append(LV_EXTRA_SCRIPT %
                       {'fieldname': 'id_%s' % fields.keys()[1]})
     except:
         return ''
     result.append('</script>')
     return '\n\n'.join(filter(None, result))
예제 #4
0
파일: __init__.py 프로젝트: rfaga/dforms
 def __init__(self, *args, **kwargs):
     extra_fields = kwargs.pop('extra_fields', None)
     self.custom_fields = []
     fields = {}
     initial = kwargs.pop('initial', {})
     fields_order = kwargs.pop('fields_order', None)
     
     if extra_fields:
         for name, field in create_fields(extra_fields):
             fields[name] = field
             self.custom_fields.append(name)
     
         instance = kwargs.get('instance', None)
         instance_extra_field = kwargs.get('instance_extra_field', 'extra_fields')
         if instance:
             extra = getattr(instance, instance_extra_field, None)
             if not extra:
                 extra = {}
             for f in self.custom_fields:
                 initial[f] = extra.get(f, '')
     super(DynamicModelForm, self).__init__(*args, initial=initial, **kwargs)
     if fields:
         self.fields = dict(self.fields.items() + fields.items())
     if fields_order:
         order_fields(self, fields_order)
예제 #5
0
    def convert_form(self, form, json_schema=None):
        if json_schema is None:
            json_schema = {
                #'title':dockit_schema._meta
                #'description'
                'type': 'object',
                'properties': {},  #TODO SortedDict
                'required': [],  #required fields should be in here
            }
        fields = form.base_fields

        # If a Form instance is given, use the 'fields' attribute if it exists
        # since instances are allowed to modify them.
        if not inspect.isclass(form) and hasattr(form, 'fields'):
            fields = form.fields

        for name, field in fields.items():
            json_schema['properties'][name] = self.convert_formfield(
                name, field, json_schema)
            if field.required:
                json_schema['required'].append(name)
        return json_schema
 def render(self, context):
     result = ['<script type="text/javascript">']
     self.form = context[self.form]
     self.formcls = self.form.__class__
     try:
         # admin formset
         fields = self.form.form.fields
         prefix = '%s-'%self.form.prefix if self.form.form.prefix else ''
     except AttributeError:
         try:
             # regular form
             fields = self.form.fields
         except AttributeError:
             raise template.TemplateSyntaxError('Form %s has no fields'%self.form)
         prefix = '%s-'%self.form.prefix if self.form.prefix else ''
     for name,field in fields.items():
         result.append(self.do_field('%s%s'%(prefix,name),field))
     try:
         result.append(LV_EXTRA_SCRIPT%{'fieldname':'id_%s'%fields.keys()[1]})
     except:
         return ''
     result.append('</script>')
     return '\n\n'.join(filter(None,result))
예제 #7
0
def query_from_request(request, queryset, fields):
    """Modify a queryset with request args

    Params :
     - request
     - queryset : queryset to modify
     - fields : dict with query <=> django field associations

    For example request with::

        name=toto&sort=id

    With fields::

        fields = {"name": "group__name", "id": "id"}

    Is equivalent to::

        queryset.filter(group__name__icontains="toto").order_by(['id'])

    queryset can be limited with start= & limit=

    """
    # Filter time
    for extfield, djfield in fields.items():
        if extfield in request.REQUEST:
            value = request.REQUEST.get(extfield)
            filter_args = {"%s__icontains" % djfield: value}
            queryset = queryset.filter(**filter_args)

    # Sort time
    if "sort" in request.REQUEST:
        sort = request.REQUEST.get("sort")
        if sort not in fields.keys():
            raise IndexError("Sort criter not listed in fields")
        dj_sort = fields[sort]

        if "dir" in request.REQUEST:
            direction = request.REQUEST.get("dir")
            if direction == "DESC":
                dj_sort = "-%s" % (dj_sort)
        queryset = queryset.order_by(dj_sort)

    # get start time
    start = request.REQUEST.get("start", 0)
    try:
        start = int(start)
    except ValueError:
        # Silent error because of user
        return queryset.none()

    # limit time
    if "limit" in request.REQUEST:
        limit = request.REQUEST.get("limit")
        try:
            limit = int(limit)
        except ValueError:
            # Silent error because of user
            return queryset.none()
        queryset = queryset[start : start + limit]
    elif start:
        queryset = queryset[start:]

    return queryset
예제 #8
0
def query_from_request(request, queryset, fields):
    """Modify a queryset with request args

    Params :
     - request
     - queryset : queryset to modify
     - fields : dict with query <=> django field associations

    For example request with::

        name=toto&sort=id

    With fields::

        fields = {"name": "group__name", "id": "id"}

    Is equivalent to::

        queryset.filter(group__name__icontains="toto").order_by(['id'])

    queryset can be limited with start= & limit=

    """
    # Filter time
    for extfield, djfield in fields.items():
        if extfield in request.REQUEST:
            value = request.REQUEST.get(extfield)
            filter_args = {'%s__icontains' % djfield : value}
            queryset = queryset.filter(**filter_args)

    # Sort time
    if 'sort' in request.REQUEST:
        sort = request.REQUEST.get('sort')
        if sort not in fields.keys():
            raise IndexError("Sort criter not listed in fields")
        dj_sort = fields[sort]

        if 'dir' in request.REQUEST:
            direction = request.REQUEST.get('dir')
            if direction == 'DESC':
                dj_sort = '-%s' % (dj_sort)
        queryset = queryset.order_by(dj_sort)

    # get start time
    start = request.REQUEST.get("start", 0)
    try:
        start = int(start)
    except ValueError:
        # Silent error because of user
        return queryset.none()

    # limit time
    if 'limit' in request.REQUEST:
        limit = request.REQUEST.get('limit')
        try:
            limit = int(limit)
        except ValueError:
            # Silent error because of user
            return queryset.none()
        queryset = queryset[start:start+limit]
    elif start:
        queryset = queryset[start:]

    return queryset