<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,7 @@
 from django import forms
 from django.http import HttpResponse
 from django.views.decorators.http import require_POST
+from django.forms.formsets import BaseFormSet
 
 from ajax_validation.utils import LazyEncoder
 
@@ -15,21 +16,36 @@ def validate(request, *args, **kwargs):
             'valid': True,
         }
     else:
-        if request.POST.getlist('fields'):
-            fields = request.POST.getlist('fields') + ['__all__']
-            errors = dict([(key, val) for key, val in form.errors.iteritems() if key in fields])
+        # if we're dealing with a FormSet then walk over .forms to populate errors and formfields
+        if isinstance(form, BaseFormSet):
+            errors = {}
+            formfields = {}
+            for f in form.forms:
+                for field in f.fields.keys():
+                    formfields[f.add_prefix(field)] = f[field]
+                for field, error in f.errors.iteritems():
+                    errors[f.add_prefix(field)] = error
+            if form.non_form_errors():
+                errors['__all__'] = form.non_form_errors()
         else:
             errors = form.errors
+            formfields = dict([(fieldname, form[fieldname]) for fieldname in form.fields.keys()])
+
+        # if fields have been specified then restrict the error list
+        if request.POST.getlist('fields'):
+            fields = request.POST.getlist('fields') + ['__all__']
+            errors = dict([(key, val) for key, val in errors.iteritems() if key in fields])
+
         final_errors = {}
         for key, val in errors.iteritems():
-            if key == '__all__':
-                final_errors['__all__'] = val
-            elif not isinstance(form.fields[key], forms.FileField):
-                html_id = form.fields[key].widget.attrs.get('id') or form[key].auto_id
-                html_id = form.fields[key].widget.id_for_label(html_id)
+            if '__all__' in key:
+                final_errors[key] = val
+            elif not isinstance(formfields[key].field, forms.FileField):
+                html_id = formfields[key].field.widget.attrs.get('id') or formfields[key].auto_id
+                html_id = formfields[key].field.widget.id_for_label(html_id)
                 final_errors[html_id] = val
         data = {
-            'valid': False,
+            'valid': False or not final_errors,
             'errors': final_errors,
         }
     json_serializer = LazyEncoder()</diff>
      <filename>ajax_validation/views.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>271f90327a4b20d25c95fb25378cc769f168e897</id>
    </parent>
    <parent>
      <id>5af12549fdf93ba9e809122cd1dca056bad619ea</id>
    </parent>
  </parents>
  <author>
    <name>Travis Cline</name>
    <email>travis.cline@gmail.com</email>
  </author>
  <url>http://github.com/alex/django-ajax-validation/commit/7bb263d317491b3eb944595e5b3a5b4af26bd8da</url>
  <id>7bb263d317491b3eb944595e5b3a5b4af26bd8da</id>
  <committed-date>2009-09-05T16:41:59-07:00</committed-date>
  <authored-date>2009-09-05T16:41:59-07:00</authored-date>
  <message>Merge commit 'travis/master'</message>
  <tree>4a06946d438ef744b478088ba2bf621dbbdbf25c</tree>
  <committer>
    <name>Travis Cline</name>
    <email>travis.cline@gmail.com</email>
  </committer>
</commit>
