【问题标题】:cannot import schema from a model with one to many relationship无法从具有一对多关系的模型中导入模式
【发布时间】:2021-06-18 23:42:04
【问题描述】:

我有两个具有一对多关系的模型:

from marshmallow import Schema, fields
from server import db, ma, app
from .category import CategorySchema


class Analysis(db.Model):
  __tablename__ = 'Analysis'
  __table_args__ = {'extend_existing': True}
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(120), index=True, unique=True)
  description = db.Column(db.Text, nullable=False)
  img = db.Column(db.LargeBinary, nullable=True)
  img_mimetype = db.Column(db.Text, nullable=True)
  img_name = db.Column(db.Text, nullable=True)
  category_id = db.Column(db.Integer, db.ForeignKey('Categories.id'), nullable=True)
  category = db.relationship("Category", back_populates="analysis")


class AnalysisSchema(ma.SQLAlchemyAutoSchema):
  class Meta:
    fields = ("id", "name", "description")
  category = fields.Nested(CategorySchema(exclude=['img', 'analysis']))
from marshmallow import Schema, fields

from server import db, ma, app
from sqlalchemy.ext.hybrid import hybrid_property
from .analysis import AnalysisSchema



class Category(db.Model):
    __tablename__ = 'Categories'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), index=True, unique=True)
    description = db.Column(db.Text, nullable=False)
    img = db.Column(db.LargeBinary, nullable=False)
    img_mimetype = db.Column(db.Text, nullable=False)
    img_name = db.Column(db.Text, nullable=False)
    analysis = db.relationship("Analysis", back_populates="category")

    @property
    def img_url(self):
        return "/categories/" + str(self.id)



class CategorySchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        # model = Category
        fields = ("id", "name", "description", "img", "img_url", "analysis")
    analysis = fields.Nested(AnalysisSchema, many=True)


class CreateCategorySchema(Schema):
    name = fields.Str(required=True)
    description = fields.Str(required=True)


class UpdateCategorySchema(Schema):
    name = fields.Str(required=True)
    description = fields.Str(required=False)
    img = fields.Str(required=False)
    img_name = fields.Str(required=False)
    img_mimetype = fields.Str(required=False)

我不明白为什么会出现此错误:ImportError: cannot import name 'CategorySchema' from 'server.models.category' (/server/server/models/category.py)

类别模型上的导入效果很好,而分析中的模型没有。

【问题讨论】:

    标签: python marshmallow


    【解决方案1】:

    您可以通过将类名传递给nested as a string 来避免循环导入——这里的问题。例如:

    class AnalysisSchema(ma.SQLAlchemyAutoSchema):
      class Meta:
        fields = ("id", "name", "description")
      category = fields.Nested("CategorySchema", exclude=["img", "analysis"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 2015-05-31
      • 2014-05-16
      • 2014-05-20
      • 2010-11-13
      • 2019-08-25
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多