Не удалось определить условие соединения между родительской и дочерней таблицами для отношения Product.collections
Взаимосвязь между продуктом и коллекцией - это "многие ко многим". Продукт может находиться во многих коллекциях, а в каждой коллекции может быть много продуктов. Для такого случая я хочу преобразовать модели django в sqlalchemy в fastapi. Ниже приведена таблица для продукта и коллекции в моделях 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 - нет внешних ключей, связывающих эти таблицы. Убедитесь, что ссылающиеся столбцы связаны с внешним ключом или 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")
Как я могу перенести модели django для product и collections в sqlalchemy, преодолев проблему join?