Mike
Mike

Reputation: 7831

django-rest-framework different fields for serialization

I have an example like

[
  {
        "url": "/api/post/12/", 
        "user": "/api/users/1/", 
        "created": "2013-08-06T04:52:28Z", 
        "updated": "2013-08-06T04:52:28Z", 
        "date": "2013-08-06T04:52:28Z", 
        "show": true, 
        "title": "test post", 
        "body": null, 
        "role": "Text", 
        "image_url": "", 
        "image": ""
    }, 
    {
        "url": "/api/post/13/", 
        "user": "/api/users/1/", 
        "created": "2013-08-06T04:53:19Z", 
        "updated": "2013-08-06T04:53:19Z", 
        "date": "2013-08-06T04:53:19Z", 
        "show": true, 
        "title": "test post", 
        "body": null, 
        "role": "Image", 
        "image_url": "http://127.0.0.1:8000/media/photos/photo_1.jpg", 
        "image": "photos/photo_1.jpg"
    }
 ]

I want my HyperlinkedModelSerializer class to not show image_url and image if it's a Text role.

Is this possible?

Upvotes: 1

Views: 385

Answers (1)

Carlton Gibson
Carlton Gibson

Reputation: 7386

You could override to_native in your serializer subclass to strip the unwanted fields in your case.

Something like:

def to_native(self, obj):
    as_native = super(MySerializer, self).to_native(obj)

    # Remove image_url and image fields if Text role.
    if as_native["role"] == "Text":
        as_native.pop('image_url', None)
        as_native.pop('image', None)

    return as_native

I hope that helps.

Upvotes: 3

Related Questions