Тестирование представления обновления: как передать данные об изменении значения в представлении обновления с формой?

Я пытаюсь написать тесткейс для одного из моих представлений, которое использует форму. views.py

def parametrage(request,pk):
    
    parametrage = get_object_or_404(Parametrage, asp_par_cle = pk)
    form = ParametrageForm(request, data=request.POST or None, instance = parametrage)
    print('form.data',form.data)

    if form.is_valid():
        parametrage = form.save()
        parametrage.opr_nom = request.user.username
        parametrage.opr_dat = timezone.now()
        form.save()

        return redirect('pharmacy:dashboard')

    return render(request, 'pharmacy/parametrage.html', {'form': form})

tests.py


class PharmacyParametrageTestCase(TestCase):
    
    def setUp(self):
        Parametrage.objects.create(asp_par_loc='TR',asp_par_ale=1,asp_par_con=8)
    
    def test_email_alert(self):
        instance = Parametrage.objects.get(asp_par_cle=1)
        data = json.dumps({"asp_par_ale":2,})
        response = self.client.post(reverse('pharmacy:parametrage', kwargs={'pk':1}),instance=instance, data=data, follow=True, content_type='application/json')
        self.assertEqual(response.status_code,200)
        self.assertEqual(Parametrage.objects.get(asp_par_cle=1).asp_par_ale,2)

Второй assert не сработал, потому что экземпляр Parametrage не обновлен. form.is_valid() возвращает False, а form.errors не возвращает никакой ошибки. form.data пуст

Очевидно, что я никогда не изменяю значение asp_par_ale, но не знаю, как это сделать в тестах. Я пытаюсь передавать данные, но не получается. буду признателен за помощь

i found i guess, when you said, object is not updated, you spoke only about opr_dat and opr_dat ? Вы дважды вызвали form.save(). Вам нужно вызвать функцию сохранения isntance :

def parametrage(request,pk):
    
    parametrage = get_object_or_404(Parametrage, asp_par_cle = pk)
    form = ParametrageForm(request, data=request.POST or None, instance = parametrage)
    print('form.data',form.data)

    if form.is_valid():
        parametrage = form.save(commit=False)
        parametrage.opr_nom = request.user.username
        parametrage.opr_dat = timezone.now()
        parametrage.save()

        return redirect('pharmacy:dashboard')

    return render(request, 'pharmacy/parametrage.html', {'form': form})
Вернуться на верх