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))
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)
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))
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
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