Search code examples
djangodjango-rest-frameworkdjango-serializer

How should I write a serializer where a foreign key cold be set by SlugRelatedField OR by the foreign key serializer?


I have a serializer as follow:

class MySerializer(serializers.ModelSerializer):
    """ Serializer for mymodel """

    version = VersionSerializer()
    device = DeviceSerializer()
    camera = CameraSerializer(many=True)

    

My code needs to be able to create instance of mymodel knowing only one field on my camera foreign key.

I can create another serializer like this:

class MySerializerSlugRelated(serializers.ModelSerializer):
    """ Serializer for vision """

    version = VersionSerializer()
    device = DeviceSerializer()
    camera = serializers.SlugRelatedField(slug_field='my_slug_field', many=True, queryset=Camera.objects.all())

But it seems kind of dirty to recreate an other serializer just to be able to get one field in a different way, is there a clean way to do this ?

Thanks


Solution

  • You can let the MySerializerSlugRelated inherit from MySerializer, and only redefine the camera field:

    class MySerializerSlugRelated(MySerializer):
        camera = serializers.SlugRelatedField(
            slug_field='my_slug_field',
            many=True,
            queryset=Camera.objects.all()
        )