endpoints-proto-datastore — поле должно быть обязательным для POST, но не GET

Допустим, у меня есть модель с двумя обязательными полями:

class ExampleModel(EndpointsModel):
    attr1 = ndb.StringProperty(required=True)
    attr2 = ndb.StringProperty(required=True)

Затем я хочу использовать endpoints-proto-datastore для запроса любого attr1 или attr2:

@ExampleModel.query_method(query_fields=('attr1', 'attr2'),
                           path='example', name='list')
    def example_list(self, query):
        return query

Это не удастся, если я укажу только одно из полей - из API Explorer это обязательное поле, но сам API возвращает:

{
 "error": {
  "code": 400, 
  "errors": [
   {
    "domain": "global", 
    "message": "Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field attr2)", 
    "reason": "badRequest"
   }
  ], 
  "message": "Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field attr2)"
 }
}

Очевидно, я мог бы пометить их как ненужные, а затем выполнить проверку в коде приложения, но мне было интересно, не придумал ли кто-нибудь другое лучшее решение.

Большое спасибо


person Ned Lowe    schedule 19.10.2016    source источник


Ответы (1)


Это старый вопрос, но я столкнулся с той же путаницей. Это ответ, который я нашел. По сути, если вы хотите сделать что-то обязательное для Post, но не получить, вам нужно создать собственный прототип класса. Который можно использовать только с методом, а не с query_method.

person turtle    schedule 14.03.2017
comment
Благодарю вас за то, что вы нашли время опубликовать здесь. - person Ned Lowe; 15.03.2017
comment
Нет проблем, вы в конечном итоге продолжали его использовать? - person turtle; 15.03.2017
comment
Я не... Я просто продолжал находить слишком много подобных вещей, которые, возможно, имели ответы, но были неочевидными, и в итоге сменили технологию. - person Ned Lowe; 15.03.2017