Python 3.x Flask Restplus返回列联接查询
我有两个相互关联的模型。我想在两个模型之间建立一个内部连接,并以特定的路径返回它。问题是,光盘只接受单一型号的列。很抱歉写得不好。我希望所有的字段都是ProcedureType.id,类似于从ProcedureType中选择pt.name,pt.description,f.*在pt.id=f.procedure\u type\u id,其中pt.id=1上选择pt.name,pt.description,f.*。我附上代码 模型程序类型Python 3.x Flask Restplus返回列联接查询,python-3.x,flask-sqlalchemy,dto,flask-restplus,Python 3.x,Flask Sqlalchemy,Dto,Flask Restplus,我有两个相互关联的模型。我想在两个模型之间建立一个内部连接,并以特定的路径返回它。问题是,光盘只接受单一型号的列。很抱歉写得不好。我希望所有的字段都是ProcedureType.id,类似于从ProcedureType中选择pt.name,pt.description,f.*在pt.id=f.procedure\u type\u id,其中pt.id=1上选择pt.name,pt.description,f.*。我附上代码 模型程序类型 class ProcedureType(db.Model)
class ProcedureType(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
dependence_id = db.Column(db.Integer)
name = db.Column(db.String(100))
description = db.Column(db.String(500))
requirements = db.Column(db.String(500))
online = db.Column(db.Boolean, default=False)
def __init__(self, dependence_id, name, description, requirements, online):
self.dependence_id = dependence_id
self.name = name
self.description = description
self.requirements = requirements
self.online = online
模型场
class Field(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
procedure_type_id = db.Column(db.Integer, db.ForeignKey(
ProcedureType.id), nullable=False)
name = db.Column(db.String(50), nullable=False, unique=True)
label = db.Column(db.String(100))
type = db.Column(db.String(100))
default_value = db.Column(db.String(100))
validations = db.Column(db.JSON)
def __init__(self, procedure_type_id, name, label, type, default_value, validations):
self.procedure_type_id = procedure_type_id
self.name = name
self.label = label
self.type = type
self.default_value = default_value
self.validations = validations
service.py
def prueba_inner_join(id):
return db.session.query(Field).join(ProcedureType).filter_by(id=id)
控制器
from flask import request
from flask_restplus import Resource
from .dto import ProcedureTypeDto, FieldDto
from . import service
field_ns = FieldDto.api
_field = FieldDto.field_procedure
@field_ns.route('/<id>')
class FieldList(Resource):
@field_ns.doc('procedure_type')
@field_ns.marshal_list_with(_field)
def get(self, id):
"""List all procedure types"""
return service.get_fields_procedure(id)
我想返回一个json中的所有内容,例如,我可以根据自己的喜好组织这些内容
{
"procedure_name": "NAME PROCEDURE TYPE",
"description": "DESCRIPTION PROCEDURE TYPE",
"fields":[{
"type": "text",
"name": "name_field",
"id": 2,
"validations": "{'required':true}",
"default_value": "",
"label": "LABEL 2",
"procedure_type_id": "1"
},
{
"type": "text",
"name": "name_field",
"id": 2,
"validations": "{'required':true}",
"default_value": "",
"label": "LABEL 2",
"procedure_type_id": "1"
}
]
}
感谢您的帮助您需要另一个模型,该模型将包含您的
字段\u过程
作为嵌套列表:
class FieldDto:
api = Namespace(...)
field = api.model('field_details', ...)
procedure = api.model('procedure', {
'procedure_name': fields.String(...),
'description': fields.String(...),
'fields': fields.List(fields.Nested(field)),
}
我还注意到,您的模型之间没有定义关系
将以下内容添加到ProcedureType
类中,以便能够引用ProcedureType
实例上的字段
属性
fields = db.relationship('Field')
晚上好,我照你说的做了,但我有以下错误:sqlalchemy.exc.ArgumentError:关系“fields”需要一个类或映射器参数(收到:
fields = db.relationship('Field')