Code

Ticket #7406: json_inputs.patch

File json_inputs.patch, 1.9 KB (added by riklaunim@…, 6 years ago)

The patch

  • django/newforms/widgets.py

     
    1818from util import flatatt 
    1919 
    2020__all__ = ( 
    21     'Widget', 'TextInput', 'PasswordInput', 
     21    'Widget', 'TextInput', 'PasswordInput', 'JsonInputs', 
    2222    'HiddenInput', 'MultipleHiddenInput', 
    2323    'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput', 
    2424    'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 
     
    157157        return mark_safe(u'<textarea%s>%s</textarea>' % (flatatt(final_attrs), 
    158158                conditional_escape(force_unicode(value)))) 
    159159 
     160class JsonInputs(Widget): 
     161    def render(self, name, value, attrs=None): 
     162        import simplejson 
     163        if value is None: value = '{}' 
     164        value = simplejson.loads(force_unicode(value)) 
     165        ret = '' 
     166        if value and len(value) > 0: 
     167            for key in value.keys(): 
     168                ret += '<input type="text" name="json_key[]" value="%s"> <input type="text" name="json_value[]" value="%s"><br />' % (key, value[key]) 
     169        ret += '<input type="text" name="json_key[]"> <input type="text" name="json_value[]">' 
     170        return mark_safe(ret) 
     171    def value_from_datadict(self, data, files, name): 
     172        json = data.copy() 
     173        if json.has_key('json_key[]') and json.has_key('json_value[]'): 
     174            keys = json.getlist("json_key[]") 
     175            values = json.getlist("json_value[]") 
     176            jsonDict = {} 
     177            for (key, value) in map(None, keys, values): 
     178                if len(key) > 0: 
     179                    jsonDict[key] = value 
     180            import simplejson 
     181            text = simplejson.dumps(jsonDict) 
     182            json['text'] = text 
     183        return super(JsonInputs, self).value_from_datadict(json, files, name) 
     184 
    160185class DateTimeInput(Input): 
    161186    input_type = 'text' 
    162187    format = '%Y-%m-%d %H:%M:%S'     # '2006-10-25 14:30:59'