Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Flask Restplus返回列联接查询_Python 3.x_Flask Sqlalchemy_Dto_Flask Restplus - Fatal编程技术网

Python 3.x Flask Restplus返回列联接查询

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)

我有两个相互关联的模型。我想在两个模型之间建立一个内部连接,并以特定的路径返回它。问题是,光盘只接受单一型号的列。很抱歉写得不好。我希望所有的字段都是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):
    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')