Как я могу решить этот круговой импорт c python? - PullRequest
1 голос
/ 07 мая 2020

Может ли кто-нибудь помочь мне с этим python циклическим импортом?

Файл measurement_schema.py импортирует elementary_process_schema. И файл elementary_process_schema.py импортирует measurement_schema.

Мне нужно использовать указанный класс в последней строке каждого объявленного класса. например: последняя строка measure_schema.py: elementary_processes = fields.Nested(ElementaryProcessSchema, many=True)

Полный код:

Measure_schema .py

from marshmallow import fields

from api import ma
from api.model.schema.elementary_process_schema import ElementaryProcessSchema


class MeasurementSchema(ma.Schema):


    id = fields.Int(dump_only=True)
    name = fields.Str()
    description = fields.Str()
    created_on = fields.Str()

    elementary_processes = fields.Nested(ElementaryProcessSchema, many=True)

elementary_process_schema.py

from marshmallow import fields

from api import ma
from api.model.schema.ar_rl_schema import ARRLSchema
from api.model.schema.data_item_schema import DataItemSchema
from api.model.schema.elementary_process_type_schema import ElementaryProcessTypeSchema
from api.model.schema.measurement_schema import MeasurementSchema


class ElementaryProcessSchema(ma.Schema):
    id = fields.Int(dump_only=True)
    name = fields.Str()
    operation = fields.Str()
    reference = fields.Str()
    created_on = fields.Str()

    elementary_process_type = fields.Nested(ElementaryProcessTypeSchema)
    data_itens = fields.Nested(DataItemSchema, many=True)
    AR_RLs = fields.Nested(ARRLSchema, many=True)

    measurement = fields.Nested(MeasurementSchema)

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

1 Ответ

1 голос
/ 07 мая 2020

Это обычная проблема с ORM, а с python она часто решается одним и тем же способом: вы определяете отношение по имени (строке), а не по ссылке (класс / экземпляр). Это хорошо задокументировано в marshmallows do c здесь:

https://marshmallow.readthedocs.io/en/stable/nesting.html#two -way-nesting

короче, попробуйте что-то вроде этого (у меня нет опыта работы с зефиром , так что это никоим образом не проверено):

elementary_processes = fields.Nested(ElementaryProcessSchema, many=True)
# would become:
elementary_processes = fields.Nested("ElementaryProcessSchema", many=True)

и

measurement = fields.Nested(MeasurementSchema)
# becomes:
measurement = fields.Nested("MeasurementSchema")
...