Я обнаружил несоответствие кодов статуса при проверке Postman vs. Localhost. Следующий TestCase проходит где response.status_code == 200
. Почтальон также возвращает 200
. Однако, когда я делаю запрос PUT
при использовании Localhost, я получаю код состояния 404
. Когда я проверяю ответ в инструментах разработчика, я получаю {"detail": "Not Found"}
.
Я хочу понять, что вызывает 404
?
tests.py
class TestUpdateUserPreferences(TestCase):
@classmethod
def setUpTestData(cls):
cls.user = User.objects.create_user("Tester")
cls.credentials = b64encode(b"Mock:secret").decode("ascii")
UserPref.objects.create(
gender=["MALE"],
size=["MEDIUM", "LARGE"],
age=["BABY", "ADULT"],
user=cls.user
)
cls.updated_pref_data = json.dumps({
"gender": ["FEMALE"],
"size": ["SMALL"],
"age": ["BABY"]
})
cls.factory = APIRequestFactory()
def test_update_user_preferences_success(self):
request = self.factory.put(
reverse("user-pref-settings"),
data=self.updated_pref_data,
content_type="application/json"
)
force_authenticate(request, self.user)
response = SetUserPrefView.as_view()(request)
self.assertEqual(response.status_code, 200)
views.py
class SetUserPrefView(
GenericAPIView,
RetrieveModelMixin,
UpdateModelMixin):
queryset = UserPref.objects.all()
serializer_class = UserPreferenceSerializer
def get_object(self):
user = self.request.user
return get_object_or_404(self.get_queryset(), user=user)
def get(self, *args, **kwargs):
return self.retrieve(self.request, *args, **kwargs)
def put(self, *args, **kwargs):
return self.update(self.request, *args, **kwargs)
def perform_update(self, serializer):
return serializer.save(user=self.request.user)
serializers.py
class UserPreferenceSerializer(serializers.Serializer):
gender = serializers.MultipleChoiceField(choices=USER_PREF_DOG_GENDER)
size = serializers.MultipleChoiceField(choices=USER_PREF_DOG_SIZE)
age = serializers.MultipleChoiceField(choices=USER_PREF_DOG_AGE)
def update(self, instance, validated_data):
instance.gender = validated_data.get('gender')
instance.size = validated_data.get('size')
instance.age = validated_data.get('age')
instance.user = instance.user
instance.save()
return instance