Это, вероятно, вызвано тем, что этот сериализатор используется как вложенный сериализатор в другом сериализаторе. Итак, скажем, определение для рассматриваемого сериализатора:
class MySerializer(serializers.Serializer):
...
И у вас есть другой сериализатор, подобный этому:
class OtherSerializer(serializers.Serializer):
my_field = MySerializer()
В этом случае при создании экземпляра OtherSerializer его контекст не передается автоматически MySerializer , поэтому не будет запроса в контексте MySerializer . Вы можете либо добавить контекст во вложенный сериализатор вручную, либо в методе get_fields проверить, что запрос существует в self.context и продолжить работу соответствующим образом.
Кроме того, я не уверен, чего вы пытаетесь достичь, но если вы предоставите поле с
write_only=True
в определении класса сериализатора поле не будет присутствовать при чтении сериализатора, т.е. для запросов get в целом, что похоже на то, что вы пытаетесь сделать здесь. Таким образом, добавление поля products как write_only будет иметь тот же эффект, вам не нужно переопределять get_fields method