Как использовать множественное наследование в Django Rest Framework
У меня есть два сериализатора, которые идентичны, за исключением их родительского класса. Один наследуется от DRF's serailizers.Serializer. Другой наследуется от класса HalModelSerializer из пакета drf_hal_json.
class BriefcaseSerializer(HalModelSerializer):
contexts = BriefcaseContextLinkSerializer(many=True, required=False)
username = serializers.CharField(write_only=True)
class Meta:
model = Briefcase
fields = (
'contexts',
'username',
)
class SimpleBriefcaseSerializer(serializers.Serializer):
contexts = BriefcaseContextLinkSerializer(many=True, required=False)
username = serializers.CharField(write_only=True)
class Meta:
model = Briefcase
fields = (
'contexts',
'username',
)
В моем views.py я переопределил метод get_serializer_class для выбора одного из этих двух сериализаторов в зависимости от заголовка Accept в запросе.
Вводить оба класса полностью - плохо по очевидным причинам. Например, если я изменю один из них и забуду изменить другой.
Моя попытка исправить это заключалась в использовании множественного наследования. Это первый раз, когда я пытался использовать множественное наследование. Попытка:
class BriefcaseMixin:
contexts = BriefcaseContextLinkSerializer(many=True, required=False)
username = serializers.CharField(write_only=True)
class Meta:
model = Briefcase
fields = (
'contexts',
'username',
)
class BriefcaseSerializer(HalModelSerializer, BriefcaseMixin):
pass
class SimpleBriefcaseSerializer(serializers.Serializer, BriefcaseMixin):
pass
Это не сработало. GET-запросы теперь выдают ошибку с
django.core.exceptions.ImproperlyConfigured: Field name `username` is not valid for model `Briefcase`.
Обратите внимание, что у меня был пользовательский метод создания для POST, который использовал имя пользователя. Я просто сократил его для минимального воспроизводимого примера.
Итак, есть идеи, как заменить первый блок кода в этом вопросе на что-то, что не повторяется?