Как написать сериализатор, в котором внешний ключ будет устанавливаться по SlugRelatedField ИЛИ по сериализатору внешнего ключа?

У меня есть сериализатор следующего вида:

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

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

    

Мой код должен быть способен создать экземпляр mymodel, зная только одно поле внешнего ключа моей камеры.

Я могу создать другой сериализатор следующим образом:

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())

Но это кажется грязным - пересоздавать другой сериализатор только для того, чтобы иметь возможность получить одно поле другим способом, есть ли чистый способ сделать это?

Спасибо

Вы можете позволить MySerializerSlugRelated наследовать от MySerializer, и только переопределить поле camera:

class MySerializerSlugRelated(MySerializer):
    camera = serializers.SlugRelatedField(
        slug_field='my_slug_field',
        many=True,
        queryset=Camera.objects.all()
    )
Вернуться на верх