I have created two models in Flask-Sqlalchemy. These models are Tickets
and Namespace
. Both models are connect with a foreign key. I also created marshmallow-sqlalchemy ModelSchema
definitions to use in a RESTful API.
class Ticket(db.Model):
id = db.Column(db.Integer, primary_key=True)
namespace = db.Column(
db.Integer, db.ForeignKey('namespace.id'), nullable=False)
title = db.Column(db.String)
description = db.Column(db.Text)
status = db.Column(db.String)
severity = db.Column(db.String)
class TicketSchema(ma.ModelSchema):
class Meta:
model = Ticket
include_fk = True
class Namespace(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
class NamespaceSchema(ma.ModelSchema):
class Meta:
model = Namespace
In my view I am trying to filter all tickets by given namespace. This is my query:
@app.route("/<string:name>", methods=["GET"])
def get_tickets_by_namespace(name):
tickets_query = Ticket.query.join(Namespace).filter(Namespace.name == name)
result = TicketSchema(many=True).dump(tickets_query).data
return jsonify({"tickets": result})
How do I access the name
attribute from the Namespace
model while joining and filtering two models?
When I enter the above URL using /aa
, I only get namespace_id
, I would like to also see the name of namespace:
{
"tickets": [
{
"description": "xcv",
"id": 1,
"namespace": 1,
"severity": "xcvbn",
"status": "xcvb",
"title": "xc"
},
{
"description": "xcv",
"id": 3,
"namespace": 1,
"severity": "xcvbnb",
"status": "axcvb",
"title": "axcb"
},
{
"description": "xcv",
"id": 4,
"namespace": 1,
"severity": "bnb",
"status": "axcvb",
"title": "aaaxcb"
}
]
}