When using $.ajax post you must be careful of what you set as contentType option. If you set it as 'application/json' you will have to parse the data from the request.BODY variable in your django class based view. The request.POST variable (Querydict) will be empty. It is better to not use the contentType option as the default will work fine.
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8') Type: String
When sending data to the server, use this content type. Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it is always sent to the server (even if no data is sent). The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding. Note: For cross-domain requests, setting the content type to anything other than application/x-www-form-urlencoded, multipart/form-data, or text/plain will trigger the browser to send a preflight OPTIONS request to the server