Я делаю конечную точку PATCH. Он работает почти нормально ... но не возвращает конечное состояние объекта при возврате его в мой тестовый класс. Так что в моем сериализаторе / просмотре все обновляется, но когда я возвращаю serialiser.data в свой тест, кажется, что мое self.device не обновляется.
Это мой код:
view:
def patch(self, request, site_pk, device_pk):
"""
PATCH the device's supplier info of the site.
"""
site_device = Device.objects.filter(site_id=site_pk, pk=device_pk)
if not site_device.exists():
raise PermissionDenied("The device does not belong to the site.")
device = site_device.first()
serializer_class = self.get_serializer_class()
serializer = serializer_class(device, data=request.data, partial=True,)
serializer.is_valid(raise_exception=True)
if "supplier" in self.request.data:
new_supplier = serializer.validated_data["supplier"]
device.supplier = new_supplier
device.save()
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
сериализатор:
class AdminDeviceInfoSerializer(AdminDeviceSerializer):
site = serializers.SerializerMethodField()
owner = serializers.SerializerMethodField()
country = serializers.SerializerMethodField()
class Meta(AdminDeviceSerializer.Meta):
fields = AdminDeviceSerializer.Meta.fields + [
"site",
"owner",
"country",
"disk_space",
"supplier",
]
@staticmethod
def get_site(device):
#somecode
@staticmethod
def get_owner(device):
#somecode
@staticmethod
def get_country(device):
#somecode
def to_representation(self, device):
data = super().to_representation(device)
if not device.supplier:
data["supplier"] = None
data["supplier"] = SupplierSerializer(device.supplier).data
return data
class AdminSiteDevicePatchSerializer(AdminDeviceInfoSerializer):
class Meta(AdminDeviceInfoSerializer.Meta):
fields = AdminDeviceInfoSerializer.Meta.fields
тестовый класс:
def test_change_supplier_devices_site(self):
new_supplier = SupplierFactory(name="STWEB")
self.client.force_login(self.admin_user)
url = reverse(
"admin-site-device-detail",
kwargs={"site_pk": self.site.pk, "device_pk": self.device_1.pk},
)
response = self.client.patch(url, data={"supplier": new_supplier.pk})
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(new_supplier.pk, self.device_1.supplier_id)