Sunday, 15 April 2012

python - Bad request for POST with relationship using flask-restless -



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