我正在使用Danny Hermes爲Google App Engine編寫的端點原型數據存儲,並需要幫助瞭解如何更新實體。我需要更新的模型是以下更新端點中的現有實體 - 原型數據存儲
class Topic(EndpointsModel):
#_message_fields_schema = ('id','topic_name','topic_author')
topic_name = ndb.StringProperty(required=True)
topic_date = ndb.DateTimeProperty(auto_now_add=True)
topic_author = ndb.KeyProperty(required=True)
topic_num_views = ndb.IntegerProperty(default=0)
topic_num_replies = ndb.IntegerProperty(default=0)
topic_flagged = ndb.BooleanProperty(default=False)
topic_followers = ndb.KeyProperty(repeated=True)
topic_avg_rating = ndb.FloatProperty(default=0.0)
topic_total_rating = ndb.FloatProperty(default=0.0)
topic_num_ratings = ndb.IntegerProperty(default=0)
topic_raters = ndb.KeyProperty(repeated=True)
正如你所看到的,評級屬性都爲0這樣的話題被評爲每次默認情況下,我需要更新每個等級的屬性。但是,我的任何屬性都不是用戶提供的實際評分。我如何傳遞用戶對主題的評價以便能夠更新模型中的屬性的值?謝謝!
from endpoints_proto_datastore.ndb import EndpointsAliasProperty
class UserModel(EndpointsModel):
...
def rating_set(self, value):
# Do some validation
self._rating = value
@EndpointsAliasProperty(setter=rating_set)
def rating(self):
return self._rating
這將使評級與UserModel
S IN請求被髮送,但不需要那些評級爲:
丹尼在這裏。你基本上需要兩件事 - 評價者和評級 - 被髮送?從'topic_raters'我推測評價者會是一個'KeyProperty',評級將是一個float或int? – bossylobster
@bossylobster是的,這是正確的。我需要傳入用於擴展用戶對象的用戶配置文件實體的鍵,該用戶對象是名爲UserProfile的模型。我需要通過用戶選擇的評分。我也使用了我設置的端點JavaScript客戶端庫,如果這改變了任何東西。所以考慮到用戶評分爲3分(滿分5分),我需要在total_rating中加3,在num_ratings中加1,並根據這兩種評分更新avg_rating。然後將用戶的配置文件密鑰添加到評估者。謝謝! – vol4life27