Как написать сериализатор, в котором внешний ключ будет устанавливаться по 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()
)