diff --git a/lib/xos-genx/xosgenx/jinja2_extensions/django.py b/lib/xos-genx/xosgenx/jinja2_extensions/django.py
index 464172a..64ab51a 100644
--- a/lib/xos-genx/xosgenx/jinja2_extensions/django.py
+++ b/lib/xos-genx/xosgenx/jinja2_extensions/django.py
@@ -79,18 +79,22 @@
             return 'GenericRelation'
 
 def map_xproto_to_django(f):
-    allowed_keys=['help_text','default','max_length','modifier','blank','choices','db_index','null','editable','on_delete','verbose_name', 'auto_now_add', 'unique']
+    allowed_keys=['help_text','default','max_length','modifier','blank','choices','db_index','null','editable','on_delete','verbose_name', 'auto_now_add', 'unique', 'min_value', 'max_value']
 
-    m = {'modifier':{'optional':True, 'required':False, '_target':'null'}}
+    # TODO evaluate if setting Null = False for all strings
+    m = {'modifier':{'optional':True, 'required':False, '_targets': ['null', 'blank']}}
     out = {}
 
     for k,v in f['options'].items():
-        if (k in allowed_keys):
+        if k in allowed_keys:
             try:
+                # NOTE this will be used to parse xproto optional/required field prefix and apply it to the null and blank fields
                 kv2 = m[k]
-                out[kv2['_target']] = kv2[v]
+                for t in kv2['_targets']:
+                    out[t] = kv2[v]
             except:
                 out[k] = v
+
     return out
 
 def xproto_django_link_options_str(field, dport=None):
@@ -121,17 +125,33 @@
 
     return format_options_string(output_dict)
 
+def use_native_django_validators(k, v):
+
+    validators_map = {
+        'min_value': 'MinValueValidator',
+        'max_value': 'MaxValueValidator'
+    }
+
+    return "%s(%s)" % (validators_map[k], v)
+
 def format_options_string(d):
+
+    known_validators = ['min_value', 'max_value']
+    validator_lst = []
+
     if (not d):
         return ''
     else:
 
         lst = []
         for k,v in d.items():
-            if (type(v)==str and k=='default' and v.endswith('()"')):
+            if k in known_validators:
+                validator_lst.append(use_native_django_validators(k, v))
+            elif (type(v)==str and k=='default' and v.endswith('()"')):
                 lst.append('%s = %s'%(k,v[1:-3]))
             elif (type(v)==str and v.startswith('"')): 
                 try:
+                    # unquote the value if necessary
                     tup = eval(v[1:-1])
                     if (type(tup)==tuple):
                         lst.append('%s = %r'%(k,tup))
@@ -146,8 +166,14 @@
                     lst.append('%s = %r'%(k,int(v)))
                 except ValueError:
                     lst.append('%s = %s'%(k,v))
-
-        return ', '.join(lst)
+        validator_string = "validators=[%s]" % ', '.join(validator_lst)
+        option_string = ', '.join(lst)
+        if len(validator_lst) == 0:
+            return option_string
+        elif len(lst) == 0:
+            return validator_string
+        else:
+            return  option_string + ", " + validator_string
 
 def xproto_django_options_str(field, dport=None):
     output_dict = map_xproto_to_django(field)
