python - Bad request for POST with relationship using flask-restless -
i'm using flask-restless , getting bad request (400) error on first post (from postman). if maintain on making same request, keeps on erroring. if remove field flask-restless complains about, run post again, positive response, add together same field in, , run again, works fine on.
url: /api/appraisals
request json:
{ "suggested_price": 88, "listing": {"id": 1} }
error response:
{ "message": "model not have field 'listing'" }
app.py:
from models.db import init_app controllers import api app = flask(__name__) app.config.from_object('config') init_app(app) api.init_api(app)
from models.db.py:
flask.ext.sqlalchemy import sqlalchemy def init_app(app): app.app_context(): db.init_app(app) db.create_all() db = sqlalchemy()
from controllers.api.py:
flask.ext.restless import apimanager class resourcemanager(apimanager): ... def init_api(app): app.app_context(): manager = resourcemanager(app, flask_sqlalchemy_db=db) manager.add_resource(listingresource()) manager.add_resource(appraisalresource())
from models.appraisal.py:
.db import db .base import basemodel class appraisal(basemodel): __tablename__ = "appraisal" # required fields suggested_price = db.column(db.integer, nullable=false) # optional fields currency = db.column(db.unicode, default=u"usd") # relationships listing_id = db.column(db.integer, db.foreignkey('listing.id'))
from models.listing.py:
sqlalchemy.schema import uniqueconstraint .db import db .base import basemodel class listing(statusfulmodel, basemodel): __tablename__ = "listing" # relationships appraisals = db.relationship( "appraisal", backref=db.backref("listing", uselist=false), uselist=true)
from controllers.resource.appraisal.py:
class appraisalresource(resource): model_class = appraisal base_url = "appraisals" allowed_methods = ["post", "get"] def get_fields(self): super_fields = super(appraisalresource, self).get_fields() homecoming super_fields + [ "listing", "listing.id" ]
i think best way explain how solve error tell on mind while thinking that.
you going situation lot apis, , it's importing know how think logics.
you got error 400 - mean sent json not in format flask expecting. according question removing listing field solved problem - feels getting closer. i looked on model trying create change(/api/appraisals
) - appraisals your model:
class appraisal(basemodel): __tablename__ = "appraisal" suggested_price = db.column(db.integer, nullable=false) currency = db.column(db.unicode, default=u"usd") listing_id = db.column(db.integer, db.foreignkey('listing.id'))
after looking @ this, can see flask expecting "listing_id" - , not "listing"
i hope clear, tell me if need help. goodluck!
python flask flask-sqlalchemy flask-restless
No comments:
Post a Comment