В DRF я часто сталкиваюсь с вопросом о погоде или нет, я должен создать собственный сериализатор для конкретного вида.Всегда есть задача выяснить, можно ли модифицировать существующие сериализаторы так, чтобы я делал то, что хочу.
Пример:
class ProductReviewSerializer(serializers.ModelSerializer):
product_name = serializers.SerializerMethodField(read_only=True)
class Meta:
model = ProductReview
fields = (
'uuid',
'review_score',
'user',
'product',
)
read_only_fields = (
'uuid',
)
def get_product_name(self, obj):
something ...
Я использую этот сериализатор для создания новых экземпляров ProductReview
.Кроме того, я хочу использовать этот сериализатор для обновления экземпляров ProductReview
.Для этого сериализатор должен проверять данные от конечной точки API, в которой пропущено множество полей, например, DRF API получает только JSON {review_score: 2)
.Для данного примера я не могу получить действительный сериализатор, если только я не объявил группу полей как read_only
, что, в свою очередь, не работает для создания новых экземпляров.
Сериализатор для редактирования ProductReviews, который принимаетданные ({review_score: ...}
) сверху будут выглядеть примерно так:
class ProductReviewEditSerializer(serializers.ModelSerializer):
class Meta:
model = ProductReview
fields = (
'review_score',
)
Я чувствую, что создаю здесь некоторые глупые недостатки дизайна.Но можете ли вы указать мне путь к лучшему решению?
Можно ли создать серию отдельных сериализаторов?Мои интуитивные ощущения говорят мне, что каждая модель должна иметь только один сериализатор ...