Release History


  • Refactored client side test runner to use npm instead of Grunt.
  • Use tox to create the testing matrix.
  • Fix #261: ModelMultipleChoiceField and CheckboxSelectMultiple.
  • Deprecate {% csrf_value %} in favour of {{ csrf_token }}.


  • On the client side, validation of the email address is done using the same regular expression as is used by Django. Until 0.8.1, the less restrictive Angular validation patterns were used.
  • Some widgets require more finegrained formatting capabilities.Added a slightly modified method method:django.forms.utils.flatatt which can use its own context for formatting.


  • Fixed a bug in NgModelFormMixin.get_form_data(): Using and ... or ... as ternary operator can have unwanted side effects. Also changed other occurrences.


  • djangular has been renamed to djng and ng.django-... has been renamed to djng-.... This was required by many users since it: - caused a naming conflict with another django app named djangular and - the identifier “djangular” by many users was seen as a bad choice. - violated the AngularJS principle that only their modules shall be prefixed with “ng”. Please read for the preceded discussion on this topic.
  • Support for ngMessages was removed again because - its code base was buggy and unmaintained - it does not make much sense to reduce the amount of auto-generated HTML - it added an alternative form rendering mixin, without any additional functionality
  • In the <select> element, the default <option selected="selected"> did not work anymore. This regression was introduced in 0.7.16.


  • Ready for Django-1.9.
  • Fixed: Non-ascii characters were not being processed correctly by django.http.request.QueryDict.init.
  • In JavaScript, replaced console.log by $log.log.
  • Use decimal base on invocation of parseInt.
  • Use square brackets to access scope members, which otherwise won’t support fields containing -.
  • templatetag load_djng_urls has been removed.
  • For CRUD, check if request method is allowed.
  • Fixed djngError directive, when using AngularJS-1.3.
  • Added support for ngMessages, as available with AngularJS-1.3.


  • Simplified middleware for reversing the URL.
  • Reversing url in djangoUrl service can now be overriden.


  • Supporting Django-1.8.
  • The widget bootstrap3.widgets.CheckboxInput got a keyword to set the choice label of a field. This allows to style this kind of field individually in a Django Form.


  • Change for Forms inheriting from NgFormBaseMixin using field_css_classes as dict: CSS classes specified as default now must explicitly be added the fields defining their own CSS classes. Before this was implicit.
  • Added AngularJS directive djng-bind-if. See docs for details.
  • Reverted fix for FireFox checkbox change sync issue (135) since it manipulated the DOM. Instead added scope.$apply() which fixes the issue on FF.
  • In BS3 styling, added CheckboxFieldRenderer to CheckboxInlineFieldRenderer (the default), so that forms with multiple checkbox input fields can be rendered as block items instead of inlines.
  • In BS3 styling, added RadioFieldRenderer to RadioInlineFieldRenderer (the default), so that forms with multiple radio input fields can be rendered as block items instead of inlines.
  • Fixed ‘classic form’ issue whereby ngModel was not being added to select of textarea elements, so returned errors where not displayed.


  • No functional changes.


  • Using field.html_name instead of Otherwise add_prefix() function on form objects doesn’t work properly.
  • Fixed Firefox checkbox change sync issue caused by click and change firing in opposite order to other browsers. Switched to ng-change to normalise behaviour.
  • Moved rejected error cleanup logic into field.clearRejected method, so that it can be removed from anywhere that has access to the field.
  • Fixed issue in rejected error clean up loop.
  • Added missing subfield cleanup to rejected error cleanup loop.
  • Added AngularJS service djangoUrl to resolve URLs on the client in the same way as on the server.


  • Fixed inheritance problem (#122) caused by a metaclass conflicting with Django’s DeclarativeFieldsMetaclass. This now should fix some issues when using forms.ModelForm. This fix changed the API slightly.
  • Fixed expansion for templatetag {% angularjs %} (#117) when using lists in Python / arrays in JavaScript.


  • TupleErrorList has been adopted to fully support Django-1.7.


  • Fixed: ng-minlength and ng-maxlength are not set to None if unset.
  • Fixed: Concatenated latest version of django-angular.js.


  • Refactored the code base. It now is much easier to understand the code and to add custom Fields and Widgets.
  • Fixed the behaviour of all Widgets offered by Django. They now all validate independently of the method (Post or Ajax) used to submit data to the server.


  • Fixed regression when using Bootstrap3FormMixin in combination with widgets.CheckboxSelectMultiple.


  • Added: Template tag {% angularjs %} which allows to share templates between Django and AngularJS.
  • Fixed: Using {{ field.error }} returned unsafe text.
  • Fixed: Adjust the regular expression and run grunt build.


  • Fixed: Error rendering while for hidden input fields.
  • Fixed: Bootstrap3 styling: label for field was rendered as lazy object instead of string.
  • Added: Url resolvers for angular controllers.


  • Added support to render a Django Form using a plugable style. Bootstrap3 styling has been implemented.
  • Added AngularJS directive for <input> fields: They now add a dummy ngModel to some input fields, so that Forms using the NgFormBaseMixin honor the pristine state and display an error list from the bound form.
  • Replaced AngularJS directive for form by a directive for ngModel. This directive restores the values in bound forms otherwise not vivible in the browser.
  • Fixed: Instead of adding attributes to Form Field Widgets, those additional attributes now are added on the fly while rendering. This caused some problems, when Forms were reused in different contexts.
  • Fixed: Behavior for BooleanField and MultipleChoiceField has been fixed so AngularJS form validation.


  • Fixed: select fields, multiple select fields, radio and checkbox input fields and text areas are handled by the built-in form directive to adopt Django’s bound forms for AngularJS.


  • For remote method invocation, replace keyword action against a private HTTP-header DjNg-Remote-Method. Added template tags djng_all_rmi and djng_current_rmi which return a list of methods to be used for remote invocation.
  • Experimental support for Python-3.3.


  • Refactored errors handling code for form validation. It now is much easier and more flexible for mixing in other form based classes.
  • Added a date validator using an AngularJS directive. * Can be used as a starting point for other customized validators.
  • Added another view, which can be used for NgModelMixin without NgValidationMixin.
  • Added new directory to handle client code. * Separated JS files for easier development. * Grunt now builds, verifies and concatenates that code. * Karma and Jasmine run unit tests for client code. * A minified version of django-angular.js is build by grunt and npm-uglify.
  • Rewritten the demo pages to give a good starting point for your own projects.


  • ADOPT YOUR SOURCES: The Javascript file /static/js/djng-websocket.js has been moved and renamed to /static/djangular/js/django-angular.js
  • Internal error messages generated by server side validation, now are mixed with AngularJS’s validation errors.
  • A special list-item is added to the list of errors. It is shown if the input field contains valid data.
  • Input fields of bound forms, now display the content of the field, as expected. This requires the Angular module ng.django.forms.


  • Refactored NgFormValidationMixin, so that potential AngularJS errors do not interfere with Django’s internal error list. This now allows to use the same form definition for bound and unbound forms.


  • Bug fix for CRUD view.


  • Support for basic CRUD view.


  • Added three way data binding.


  • Removed @csrf_exempt on dispatch method for Ajax requests.


Client side form validation for Django forms using AngularJS



  • Set Cache-Control: no-cache for Ajax GET requests.


  • added handler to mixin class for ajax get requests.
  • moved unit tests into testing directory.
  • changed request.raw_post_data -> request.body.
  • added possibility to pass get and post requests through to inherited view class.


  • optimized CI process


  • added first documents


  • better packaging support


  • fixed initial data in NgModelFormMixin


  • initial revision