колба беспокойная не может построить запрос

У меня есть две модели Flask-SQLAlchemy и соответствующие конечные точки API Flask-Restless, как показано ниже:

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

Но когда я пытаюсь выполнить поисковые запросы к связанным моделям, как описано в официальных документах,, я получаю { "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.


person Manuel Lopera    schedule 03.07.2015    source источник


Ответы (2)


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

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

"val":"1"

Верный:

"val":1
person Scott Essner    schedule 03.10.2015

Чтение из этой (см. Последний ответ) проблемы с колбой:

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

И предупреждение гласит:

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

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

Обновить

У вас не может быть динамических отношений «многие к одному». Ваши person отношения - из-за backref - отношения "многие к одному", помимо отношения "один ко многим". Из документов:

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

person doru    schedule 04.07.2015
comment
По этому я не нахожу ошибок в своих моделях. - person Manuel Lopera; 04.07.2015