#contrib.soaplib.serializer.py from soaplib.serializers.clazz import ClassSerializer class BaseClassSerializer ( ClassSerializer ): ''' Helper class to convert django model into soaplib model Constructor read from django model, custom dict, and permit to override parameters using kwargs. Example: #modelsws.py from contrib.soaplib.serializer import BaseClassSerializer from soaplib.serializers.primitive import * class WsComment(BaseClassSerializer): class types: content = String rating = Integer ratingText = String class WsBlog(BaseClassSerializer): class types: title = String subtitle = String pub_date = DateTime replay_to = String content = String comments = Array(WsComment) #views.py from contrib.soaplib.handler import DjangoSoapApp, soapmethod, soap_types from foo.models import Blog from foo.wsmodels import WsBlog from foo.wsmodels import WsComment class BlogService(DjangoSoapApp): __tns__ = 'http://ws.javapress.org/blog/' @soapmethod(_returns=soap_types.Array(WsBlog)) def get_blogs(self): blogs = Blog.objects.all() results = [] for blog in blogs: comments = [] for comment in blog.comment_set.all(): comments.append(WsComment(comment, ratingText=comment.ratingText())) b = WsBlog(blog, comments=comments) results.append(b) return results blog_service = BlogService() #urls.py urlpatterns = patterns('', (r'^blog/', 'foo.views.blog_service'), (r'^blog/service.wsdl', 'foo.views.blog_service'), ) ''' def __init__ ( self , * args , ** kwargs ): super ( BaseClassSerializer , self ) . __init__ () # for each args read attributes and update wsobjcet for source in args : if isinstance ( source , dict ): self . __dict__ . update ( source ) else : # if arg is not an dict, take his dict self . __dict__ . update ( source . __dict__ ) # update object also with kwargs self . __dict__ . update ( kwargs )