2015-07-03 3 views
1

У меня есть две модели Колба-SQLAlchemy и respectives Колба-беспокойных API конечных точек следующим образом:колба беспокойный удалось построить запрос

class Person(db.Model): 
    person_id = db.Column(db.Integer, primary_key=True) 
    document = db.Column(db.String(), unique=True) 
    name = db.Column(db.String(45)) 

class Student(db.Model): 
    student_id = db.Column(db.Integer, primary_key=True) 
    person_id = db.Column(db.Integer, db.ForeignKey('person.person_id')) 
    code = db.Column(db.String(45)) 

    person = db.relationship('Person', backref=db.backref('students', lazy='dynamic')) 

manager.create_api(Person, methods=['GET', 'POST']) 
manager.create_api(Student, methods=['GET', 'POST']) 

Эти URL работает отлично:

  • http://localhost:8080/api/person
  • http://localhost:8080/api/student

Но когда я пытаюсь выполнить поисковые запросы к реляционным моделям, как описано в official docs, я получаю { "message": "Unable to construct query" } для этих запросов:

  • http://localhost:8080/api/person?q={"filters":[{"name":"students__code","op":"eq","val":"1"}]}

  • http://localhost:8080/api/person?q={"filters":[{"name":"students","op":"has","val":{"name":"code","op":"eq","val":"1"}}]}

  • http://localhost:8080/api/student?q={"filters":[{"name":"person__document","op":"eq","val":"111"}]}

  • http://localhost:8080/api/student?q={"filters":[{"name":"person","op":"any","val":{"name":"document","op":"eq","val":"111"}}]}

Я использую Flask 0.10.1, Flask-SQLAlchemy 2.0, Flask-Restless 0.17.0, SQLAlchemy 1.0.6 и Python 2.7.

ответ

1

Чтение из this (см последний ответ) склянки-беспокойный вопрос:

В соответствии с предупреждением в this section документации SQLAlchemy, динамические отношения могут быть использованы только для один ко многим отношений, не многие-к-одному. В версии 0.8.0b2 (+) SQLAlchemy вызывает исключение, если вы пытаетесь использовать загрузчик динамических отношений для неправильного отношения.

И warning гласит:

Предупреждение

«динамического» Загрузчик относится только к коллекции. Недействительно для использовать «динамические» загрузчики с отношениями «один-к-одному», «один-к-одному» или «uselist = False ». Более поздние версии SQLAlchemy выдают предупреждения или исключения в этих случаях.

Update

Вы не можете иметь отношения многие-к-одному, который является динамическим. Ваша связь person - из-за backref - отношения «один-ко-многим». Из docs:

Чтобы установить двунаправленную связь в один-ко-многим, где «обратный» сторона это многие к одному, указать опцию backref.

+0

В соответствии с этим, я не нахожу ошибки в своих моделях. –

+0

Я обновил ответ. – doru

2

Числовые значения в ваших запросах не следует указывать.

Неправильно:

"val":"1" 

Правильно:

"val":1 
Смежные вопросы