python - Flask SQLAlchemy 访问多对一父属性
问题描述
我已经在 stackoverflow 中搜索了类似问题的解决方案,但还没有找到,或者可能未能正确实施解决方案。我有一个名为 ProductCardModel 的关联模型,它是通过外键建立的许多关系的一部分。我无法在此模型中加载连接的关系。我可以从父模型访问它,并通过对关系的列表理解来查看连接如何(来自我未在此处包含的另一个模型)
'product_cards': [ product_card.json() for product_card in self.product_cards.all()]
我该如何解决这个问题。我想要连接到 ProductModel 的 product_id 来获取它的属性。是我应该如何构建我的模型还是应该如何查询它?
下面是两个连接的模型
from db import db
class ProductModel(db.Model):
__tablename__ = "products"
product_id = db.Column(db.Integer, primary_key=True)
product_price = db.Column(db.Float(precision=2))
product_name = db.Column(db.String(250))
product_barcode = db.Column(db.String(250))
product_code = db.Column(db.String(100))
product_category = db.Column(db.String(100))
zone_name = db.Column(db.String, db.ForeignKey("zones.zone_name"))
product_cards = db.relationship('ProductCardModel', backref='products', lazy='dynamic')
def __init__(self, product_price, product_name, product_barcode,
product_code, product_category, zone_name):
self.product_price = product_price
self.product_name = product_name
self.product_barcode = product_barcode
self.product_code = product_code
self.product_category = product_category
self.zone_name = zone_name
def json(self):
return {
'product_id': self.product_id,
'product_price': self.product_price,
'product_name': self.product_name,
'product_barcode': self.product_barcode,
'product_code': self.product_code,
'product_category': self.product_category,
'zone_name': self.zone_name,
'product_card': [product_card.json() for product_card in self.product_cards.all()]
}
@classmethod
def find_by_product_code(cls, code):
return cls.query.filter_by(product_code=code).all()
@classmethod
def find_by_product_id(cls, product_id):
return cls.query.filter_by(product_id=product_id).first()
def save_to_db(self):
db.session.add(self)
db.session.commit()
def delete_from_db(self):
db.session.delete(self)
db.session.commit()
问题出在下面
from flask import json
from datetime import datetime
from db import db
from models.product import ProductModel
class ProductCardModel(db.Model):
__tablename__ = "productcards"
product_card_id = db.Column(db.Integer, primary_key=True)
product_order = db.Column(db.String(50))
quantity_needed = db.Column(db.Integer)
quantity_final = db.Column(db.Integer, default=0)
date_created = db.Column(db.DateTime, default=datetime.utcnow)
date_modified = db.Column(db.DateTime, default=datetime.utcnow)
modified_by_user = db.Column(db.Integer, db.ForeignKey("users.user_id"))
added_by = db.Column(db.String(50))
is_done = db.Column(db.Boolean, default=False)
fault_by_user = db.Column(db.Integer, db.ForeignKey("users.user_id"))
fault_text = db.Column(db.String(250))
fault_is_true = db.Column(db.Boolean, default=False)
shipment = db.Column(db.Integer, db.ForeignKey('shipments.shipment_id'))
vendor = db.Column(db.String(5), db.ForeignKey('vendors.vendor_name'))
product_id = db.Column(db.Integer, db.ForeignKey('products.product_id'),)
product = db.relationship("ProductModel", uselist=False)
fault = db.relationship("UserModel", foreign_keys=[fault_by_user])
modified = db.relationship("UserModel", foreign_keys=[modified_by_user])
def __init__(self, product_id, product_order, quantity_needed, added_by, shipment, vendor, *args, **kwargs):
self.product_id = product_id
self.product_order = product_order
self.quantity_needed = quantity_needed
self.added_by = added_by
self.shipment = shipment
self.vendor = vendor
def json(self):
return {
'product_card_id': self.product_card_id,
'product': self.product_id,
'product_order': self.product_order,
'quantity_needed': self.quantity_needed,
'quantity_final': self.quantity_final,
'date_created': self.date_created.isoformat(),
'date_modified': self.date_modified.isoformat(),
'modified_by': self.modified_by_user,
'added_by': self.added_by,
'is_done': self.is_done,
'fault': self.fault,
'failt_text': self.fault_text,
'fault_is_true': self.fault_is_true,
'shipment': self.shipment,
'vendor': self.vendor
}
@classmethod
def find_by_id(cls, product_card_id):
return cls.query.filter_by(product_card_id=product_card_id).first()
@classmethod
def find_by_product(cls, product):
return cls.query.filter_by(product_id=product).first()
def save_to_db(self):
db.session.add(self)
db.session.commit()
def delete_from_db(self):
db.session.delete(self)
db.session.commit()
提前感谢您的任何反馈!
最好的问候,
雷达尔
解决方案
推荐阅读
- python - 使用 python 从亚马逊页面获取 ASIN 编号
- java - 提高休眠查询性能
- swift - 单元格不会显示在 UICollectionView 上
- wordpress - 如何从 CloudFront CDN 提供 WordPress 插件文件(JS 和 CSS)?
- java - 在 Spring Boot/Spring Data MongoDB 中找不到 Repository bean
- react-native - 在 React Native 中清除输入
- python - ImportError: No module named 'PyQt5.Qsci' [1016] 无法执行脚本接口
- typescript - 计算属性“解析错误:'}' 预计在”
- ionic4 - 如何在ionic4中加载带有弹出框的页面
- typescript - 带数字的联合类型 | 这是不能接受的吗?