Django TestCase: данные не передаются в ajax => status_code =400
Я хочу внедрить тест одного из моих Ajax представлений.
Я прочитал документ, но не знаю, почему данные не передаются в форму, и, следовательно, валидация формы не работает, объясняя status_code 400.
views.py
class AjaxPatientCreate(SuccessMessageMixin, CreateView):
model = Patient
form_class = PatientForm
def get(self, *args, **kwargs):
form = self.form_class()
return render(self.request, self.template_name, {"PatientForm": form})
def post(self, *args, **kwargs):
if self.request.method == "POST" and self.request.is_ajax():
pat = self.request.POST.get('pat') # empty
pat_sit = self.request.POST.get('pat_sit') # empty
form = self.form_class(self.request.POST)
if form.is_valid():
form.save()
return JsonResponse({
"success":True,
"total_patient": Patient.objects.filter(pat_sit__in = user_authorized_sites).count(),
"datatable": render_to_string(
'ecrf/_datatable.html',
{
'ajax_patients': Patient.objects.filter(pat_sit__in = user_authorized_sites),
'user_can_delete_patient' : self.request.user.has_perm('ecrf.can_delete_patient')
} # data to pass to template
)
}, status=200)
else:
return JsonResponse({"success":False}, status=400)
test.py
@override_settings(DEBUG=True)
class AjaxPatientCreateViewTest(TestCase):
def setUp(self):
self.client = Client(HTTP_ACCEPT_LANGUAGE='fr') # define in context_processor
self.login = self.client.login(username='admin', password='admin')
def test_post(self):
self.assertTrue(self.login)
response = self.client.post(
reverse('ecrf:ajax_patient_create'),
data={'pat': 'TR001','pat_sit': 4,},
content_type='application/json', # django serialize data to JSON
HTTP_X_REQUESTED_WITH='XMLHttpRequest' # ajax view
)
print('response.status_code',response.status_code)