2013-12-04 5 views
0

Система запроса запроса на обслуживание была в режиме реального времени, но теперь мы хотели бы отредактировать свойства, связанные с типом объекта запроса (requesttype). Когда я изменить строку:Изменение свойств объекта в Google App Engine

requesttype = db.StringProperty(verbose_name="Request Type*",choices=(["Bulky Item Disposal","Carpentry","Ceiling,Doors","Electrical","Elevator","Fire Equipment","Groundskeeping","Hazardous Waste","HVAC","Kitchen Equipment","Lighting,Painting","Plumbing","Recycling","Refrigeration","Too Cold","Too Hot","Trash","Vehicle Maintenance","Water Leak","Windows","Other"])) 

К

requesttype = db.StringProperty(verbose_name="Request Type*",choices=(["Bulky Item Disposal","Carpentry","Ceiling","Doors","Electrical","Elevator","Fire Equipment","Groundskeeping","Hazardous Waste","HVAC","Kitchen Equipment","Lighting","Locksmith","Painting","Plumbing","Recycling","Refrigeration","Too Cold","Too Hot","Trash","Vehicle Maintenance","Water Leak","Windows","Other"])) 

Я дал следующее сообщение об ошибке в журнале;

Property requesttype is u'Ceiling,Doors'; must be one of ['Bulky Item Disposal', 'Carpentry', 'Ceiling', 'Doors', 'Electrical', 'Elevator', 'Fire Equipment', 'Groundskeeping', 'Hazardous Waste', 'HVAC', 'Kitchen Equipment', 'Lighting', 'Locksmith', 'Painting', 'Plumbing', 'Recycling', 'Refrigeration', 'Too Cold', 'Too Hot', 'Trash', 'Vehicle Maintenance', 'Water Leak', 'Windows', 'Other'] 
    Traceback (most recent call last): 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__ 
     rv = self.handle_exception(request, response, e) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__ 
     rv = self.router.dispatch(request, response) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
     return route.handler_adapter(request, response) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__ 
     return handler.dispatch() 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch 
     return self.handle_exception(e, self.app.debug) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch 
     return method(*args, **kwargs) 
     File "/base/data/home/apps/s~mma-facreq/6.372062129927600214/main.py", line 158, in get 
     self.response.out.write(template.render(template_values)) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 894, in render 
     return self.environment.handle_exception(exc_info, True) 
     File "/base/data/home/apps/s~mma-facreq/6.372062129927600214/html/manage.html", line 1, in top-level template code 
     {% extends "html/base.html" %} 
     File "/base/data/home/apps/s~mma-facreq/6.372062129927600214/html/base.html", line 41, in top-level template code 
     {% block content %}{% endblock %} 
     File "/base/data/home/apps/s~mma-facreq/6.372062129927600214/html/manage.html", line 14, in block "content" 
     {% for x in reqs %} 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 2326, in next 
     return self.__model_class.from_entity(self.__iterator.next()) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 1438, in from_entity 
     return cls(None, _from_entity=entity, **entity_values) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 970, in __init__ 
     prop.__set__(self, value) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 614, in __set__ 
     value = self.validate(value) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 2841, in validate 
     value = super(StringProperty, self).validate(value) 
     File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 646, in validate 
     (self.name, value, self.choices)) 
    BadValueError: Property requesttype is u'Ceiling,Doors'; must be one of ['Bulky Item Disposal', 'Carpentry', 'Ceiling', 'Doors', 'Electrical', 'Elevator', 'Fire Equipment', 'Groundskeeping', 'Hazardous Waste', 'HVAC', 'Kitchen Equipment', 'Lighting', 'Locksmith', 'Painting', 'Plumbing', 'Recycling', 'Refrigeration', 'Too Cold', 'Too Hot', 'Trash', 'Vehicle Maintenance', 'Water Leak', 'Windows', 'Other'] 
+0

Не могли бы вы предоставить код, используемый для изменения свойств, связанных с объектом запроса. – Totem

ответ

2

Похоже, у вас опечатка в исходном коде, использовал его, чтобы сохранить некоторые данные в хранилище данных, а затем обновил свой код, чтобы исправить это.

Теперь вы должны иметь некоторые записи в хранилище данных, которые содержат «Потолок, двери» в качестве типа запроса. Когда они получаются, они вызывают ошибку, поскольку это уже не законный тип запроса.

Чтобы исправить это, вам в основном нужно добавить «Потолочные, дверные», «Потолочные», «Двери» к вариантам, а затем обновить все объекты в вашем хранилище данных, которые имеют «Потолок, двери», в соответствующие , стоимость. После того, как вы это сделали, вы можете удалить «Потолок, двери» в качестве выбора.

+0

Или используйте удаленный api и измените необработанные значения, чтобы отразить выбор. Это может быть сделано без развертывания нового кода, однако, видя, что вы получаете ошибки, вероятно, лучше всего будет делать в соответствии с @dragonx, развернуть код с дополнительными проверенными значениями. Лично я не думаю, что использование Choices для StringProperty - хорошая идея, если вы не уверены, что никогда не измените выбор (особенно измените/удалите существующие значения). –

+0

^Это должно быть и. Да, удаленный API, вероятно, более простой способ сделать это, если у вас нет большого количества объектов. Вам все равно придется обновлять свою модель, или удаленный API все равно будет обрабатывать ваши сущности, если вы не используете API низкого уровня для обновления объектов. – dragonx

+0

;-) Я нахожу низкоуровневый api, часто наиболее удобный для изменения базовых типов, особенно если у вас есть десятки тысяч или около того. –

Смежные вопросы