Зефир, ограничивающий записи во вложенной схеме - PullRequest
0 голосов
/ 25 августа 2018

Упростит немного, но надеюсь, что проблема ясна в этом примере:

Я использую mysql с sqlalchemy ORM.Допустим, у меня есть таблица с именем «cellphoneTable», а другая - «billTable».От сотового телефона до счетов существует 1-много отношений.Используя Зефир, у меня есть следующее, и он РАБОТАЕТ:

class cellphoneSchema(Schema):
    id = fields.Int(dump_only=True)
    number = fields.Str()     
    bills = fields.nested('billSchema', many=True)

class billSchema(Schema):
   <nothing special here: assume some Ints Floats Dates and Strings>

Теперь, когда я хочу сбросить данные моего мобильного телефона с счетами:

c1 = <get a cellphone record via session.query(cellphoneTable).get(c_id)...>
cs = cellphoneSchema()
return cs.dump(c1).data

Как указано выше, это работает.Я получаю данные мобильного телефона и все связанные с этим счета за этот c_id.

ОДНАКО, я хочу получить, например, только последние 12 месяцев счетов (или последние 3 или какой-то такой лимит).

Каков наилучший способ ограничить вложенный запрос Marshmallow ограничением «числа строк» ​​без необходимости писать запрос самостоятельно, а затем «соединить» два результата для jsonify и return - обратите внимание, что я делаютакие запросы ко многим таблицам по всему моему приложению, так что надеемся избежать раздувания кода и ручной работы над многими из них.

Поддерживает ли Marshmallow это?Есть идеи?Через декораторов или ????хотя большая часть того, что я прочитал, работает с отдельным объектом (например, pre_load или post_load).Кроме того, я не хочу получать все строки, а затем выбрасывать большую часть того, что мне не нужно, и есть совсем немного того, что мне не нужно (примечание: мы говорим о получении десятков строк из, возможно, сотен).

...