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)
Вернуться на верх