python - 无法确定关系 Product.collections 上的父/子表之间的连接条件
问题描述
Product 和 Collection 之间的关系是多对多的。一个产品可以在多个集合中,每个集合可以有多个产品。对于这种情况,我想将 django 模型转换为 fastapi 中的 sqlalchemy。下面是 django 模型中的产品和集合表
class Product(models.Model):
product_type = models.ForeignKey(
ProductType, related_name="products", on_delete=models.CASCADE
)
name = models.CharField(max_length=250)
slug = models.SlugField(max_length=255, unique=True, allow_unicode=True)
class CollectionProduct(models.Model):
collection = models.ForeignKey(
"Collection", related_name="collectionproduct", on_delete=models.CASCADE
)
product = models.ForeignKey(
Product, related_name="collectionproduct", on_delete=models.CASCADE
)
class Collection(models.Model):
name = models.CharField(max_length=250, unique=True)
slug = models.SlugField(max_length=255, unique=True, allow_unicode=True)
products = models.ManyToManyField(
Product,
blank=True,
related_name="collections",
through=CollectionProduct,
through_fields=("collection", "product"),
)
background_image = VersatileImageField(
upload_to="collection-backgrounds", blank=True, null=True
)
我尝试了以下方法将 django 模型迁移到 sqlalchemy。但是,我收到以下错误
sqlalchemy.exc.NoForeignKeysError:无法确定关系 Product.collections 上的父/子表之间的连接条件 - 没有链接这些表的外键。确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或指定“primaryjoin”表达式。
sqlalchemy
class Product(Base, TimestampMixin):
id = Column(Integer, primary_key=True, index=True)
title = Column(String(255), nullable=False)
slug = Column(String, index=True, unique=True)
# referencing the parent
product_type_id = Column(Integer, ForeignKey("producttype.id"))
product_type = relationship("ProductType", back_populates="products")
collections = relationship(
"Collection",
back_populates="product",
)
collectionproduct = relationship("CollectionProduct", back_populates="product")
class Collection(Base, TimestampMixin):
id = Column(Integer, primary_key=True, index=True)
title = Column(String(255), nullable=False)
slug = Column(String, index=True, unique=True)
product = relationship(
"Product",
# secondary=ProductCollection.__tablename__,
back_populates="collections",
)
collectionproduct = relationship("CollectionProduct", back_populates="collection")
class CollectionProduct(Base, TimestampMixin):
id = Column(Integer, primary_key=True, index=True)
collection_id = Column(Integer, ForeignKey("collection.id"))
product_id = Column(Integer, ForeignKey("product.id"))
collection = relationship("Collection", back_populates="collectionproduct")
product = relationship("Product", back_populates="collectionproduct")
如何通过克服加入问题来迁移 sqlalchemy 中产品和集合的 django 模型?
解决方案
推荐阅读
- android - 致命异常:java.lang.IllegalStateException no event down from INITIALIZED
- javascript - ReactJS 和 Firebase 配额通过小数据快速达到
- sql - MSSQL 日期格式
- ros - libroscpp.so ECLIPSE 中没有这样的文件或目录
- c++ - 分离视频帧 C++ 的 Y 和 UV
- curl - 从 EC2 实例调用 AWS Gateway Rest API
- python - 二叉树Python的最小深度不起作用
- python - 如何使用 python 脚本 ssh 到远程 linux 服务器,并能够在 python 脚本中使用 ssh 时以用户指定的身份执行命令
- javascript - 生命周期钩子中的声明方法与VueJs中的方法属性有什么区别
- python - 如何在 Python 中创建和遍历决策树