Django oscar api перезаписывать дочерний сериализатор - PullRequest
0 голосов
/ 27 мая 2020

Как можно перезаписать oscar api ChildProductserializer . Я следовал руководству по oscar api, как перезаписать сериализаторы, но я не могу перезаписать этот сериализатор

Oscar api Child Serializer

class ChildProductserializer(PublicProductSerializer):
    "Serializer for child products"
    parent = serializers.HyperlinkedRelatedField(
    view_name="product-detail",
    queryset=Product.objects.filter(structure=Product.PARENT),
    )
    # the below fields can be filled from the parent product if enabled.
    images = ProductImageSerializer(many=True, required=False, source="parent.images")
    description = serializers.CharField(source="parent.description")

    class Meta(PublicProductSerializer.Meta):
        fields = overridable(
            "OSCARAPI_CHILDPRODUCTDETAIL_FIELDS",
            default=(
            "url",
            "upc",
            "id",
            "title",
            "structure",
            # 'parent', 'description', 'images', are not included by default, but
            # easily enabled by overriding OSCARAPI_CHILDPRODUCTDETAIL_FIELDS
            # in your settings file
            "date_created",
            "date_updated",
            "recommended_products",
            "attributes",
            "categories",
            "product_class",
            "price",
            "availability",
            "options",
            ),
        )

My overwrite child Serializer

class ChildProductSerializer(product.ChildProductserializer):
    price = serializers.SerializerMethodField()
    availability = serializers.SerializerMethodField()
    class Meta(product.ChildProductserializer.Meta):
        fields=('url','parent','price','availability')
        # 'price','availability','parent')
    def get_price(self, instance):
        request = self.context.get("request")
        strategy = Selector().strategy(request=request, user=request.user)

        ser = checkout.PriceSerializer(
            strategy.fetch_for_product(instance).price,
            context={'request': request})
        return ser.data
    def get_availability(self,instance):
        request = self.context.get("request")
        strategy = Selector().strategy(request=request, user=request.user)
        ser = product.AvailabilitySerializer(
        strategy.fetch_for_product(instance).availability,
        context={'request': request}
    )
    return ser.data
    class ProductLinkSerializer(product.ProductLinkSerializer):
        price = serializers.SerializerMethodField()
        availability = serializers.SerializerMethodField()
        class Meta(product.ProductLinkSerializer.Meta):
            fields = ('url','children')
    # ,'id','children','price','title','images','description','children','structure','availability')

    def get_price(self, instance):
        request = self.context.get("request")
        strategy = Selector().strategy(request=request, user=request.user)

    ser = checkout.PriceSerializer(
        strategy.fetch_for_product(instance).price,
        context={'request': request})
    return ser.data

    def get_availability(self,instance):
        request = self.context.get("request")
        strategy = Selector().strategy(request=request, user=request.user)
        ser = product.AvailabilitySerializer(
        strategy.fetch_for_product(instance).availability,
        context={'request': request}
    )
    return ser.data

, но даже поля Meta не работают, а поля api отображают значения по умолчанию. У меня проблема только с этим сериализатором, поскольку перезапись ProductLinkSerializer и OptionSerializer в одном файле работает нормально.

...