1

I have the following schemas in marshmallow that rely on models built with sqlalchemy. I am able to show an API response with multiple subscription prices that come from a many-to-many relationship off of the Journal model that is called 'subscription_prices'.

from marshmallow import fields

class SubscriptionPriceSchema(ma.Schema):
    price = fields.Decimal(as_string=True)
    class Meta:
        model = SubscriptionPrice
        fields = (
            "price",
            "year",
        )

class JournalSchema(ma.Schema):
    subscription_prices = fields.Nested(SubscriptionPriceSchema, many=True)

    class Meta:
        model = Journal
        fields = (
            "title",
            "subscription_prices"
        )

However, what I want to do is add a field called 'provenance' that is at the same level of the subscription prices. So I tried to do this and it is not working:

from marshmallow import fields

class SubscriptionPriceSchema(ma.Schema):
    price = fields.Decimal(as_string=True)
    class Meta:
        model = SubscriptionPrice
        fields = (
            "price",
            "year",
        )

class SubscriptionSchema(ma.Schema):
    provenance = fields.String(attribute="publisher.provenance")
    subscription_prices = fields.Nested(SubscriptionPriceSchema, many=True)
    class Meta:
        fields = (
            "provenance",
            "subscription_prices",
        )


class JournalSchema(ma.Schema):
    subscription_prices = fields.Nested(SubscriptionSchema)

    class Meta:
        model = Journal
        fields = (
            "title",
            "subscription_prices"
        )

It seems like the relationship 'subscription_prices' is not passed in beyond one level, so it does not reach the new SubscriptionSchema. Any ideas on how I can make this work?

Casey
  • 2,611
  • 6
  • 34
  • 60

0 Answers0