С использованием Postman функционал отрабатывает, инстансы обновляются. Написал такой тест
class VendorProfileUpdateViewTest(APITestCase):
def test_check_partial_update_api(self):
data = {"nda": "2020-11-11"}
vendor = Vendors.objects.create(vendor_name="U4", country="Belarus", nda="2020-12-12", )
VendorContacts.objects.create(contact_name="Mrk", phone="2373823", email="test@gmail.com", vendor=vendor)
_id = vendor.vendorid
url = reverse('vendor_update', kwargs={'vendorid': _id})
response = self.client.put(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(vendor.nda, '2020-11-11')
И получаю
FAIL: test_check_partial_update_api (vendors.tests.VendorProfileUpdateViewTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/y700/projects/solution/apps/vendors/tests.py", line 183, in test_check_partial_update_api
self.assertEqual(vendor.nda, '2020-11-11')
AssertionError: '2020-12-12' != '2020-11-11'
- 2020-12-12
? ^ ^
+ 2020-11-11
? ^ ^
Если распринтить в тесте то что отдается клиентом
print(json.loads(response.content)['nda'])
то ролучаю то что и ожидал - новую дату
2020-11-11
Но assertEqual выдает ошибку, не могу понять что не так.
views.py
class VendorProfileUpdateView(generics.RetrieveUpdateAPIView):
serializer_class = VendorManagementUpdateSerializer
lookup_field = 'vendorid'
def get_queryset(self):
vendorid = self.kwargs['vendorid']
return Vendors.objects.filter(vendorid=vendorid)
def put(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs)
serializer.py
class VendorManagementUpdateSerializer(serializers.ModelSerializer):
contacts = VendorContactSerializer(many=True)
parent = serializers.PrimaryKeyRelatedField(queryset=Vendors.objects.all(), required=False, allow_null=True)
class Meta:
model = Vendors
fields = ('vendorid',
'vendor_name',
'active',
'country',
'nda',
'parent',
'contacts',
)
def update(self, instance, validated_data):
# raise_errors_on_nested_writes('update', self, validated_data)
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
return instance
urls.py
path('<int:vendorid>/', VendorProfileUpdateView.as_view(), name='vendor_update'),