A]問題摘要:幫助構建了一個GQL查詢一對多的關係
我有一個在我的項目很多數據模型。我需要幫助構建一個查詢以基於「one」端數據對象的關鍵字獲取「多」端數據對象。
請參閱「編輯#1」瞭解已運行的代碼,但仍然效率低下。
B]問題的細節:
1]我有「UserReportedCountry」(一個)「UserReportedCity」(多),「UserReportedCity」(一個)「UserReportedStatus」(多)的數據模型的關係。
2] UserReportedCountry的關鍵字是country_name,例如 - 「unitedstates」。 UserReportedCity的關鍵字是country_name:city_name,例如「unitedstates:boston。 UserReportedStatus沒有特殊的密鑰名稱。
3]我有我的Python代碼的用戶的國家和城市的名字,我想根據這是市重點名稱檢索所有的「UserReportedStatus」對象「COUNTY_NAME:CITY_NAME」
C]代碼摘錄:
1]數據庫模型:
class UserReportedCountry(db.Model):
country_name = db.StringProperty(required=True,
choices=['Afghanistan','Aring land Islands']
)
class UserReportedCity(db.Model):
country = db.ReferenceProperty(UserReportedCountry, collection_name='cities')
city_name = db.StringProperty(required=True)
class UserReportedStatus(db.Model):
city = db.ReferenceProperty(UserReportedCity, collection_name='statuses')
status = db.BooleanProperty(required=True)
date_time = db.DateTimeProperty(auto_now_add=True)
2]查詢到目前爲止,我曾嘗試:
def get_data_for_users_country_and_city(self,users_country,users_city):
key_name_for_user_reported_city = users_country + ":" + users_city
return UserReportedStatus.all().filter('city.__key__=', key_name_for_user_reported_city).fetch(limit=10)
d]技術被使用
1]的Python
2]谷歌應用程序引擎
3]的Django
4] Django模型。
[編輯#1]
我曾嘗試以下機制來查詢基於給定的城市和國家地位的對象。這已經奏效,但我相信這是一個低效的機制來執行任務。
def get_data_for_users_country_and_city(self,users_country,users_city):
key_name_for_user_reported_city = users_country + ":" + users_city
city_object = UserReportedCity.get_by_key_name(key_name_for_user_reported_city)
return UserReportedStatus.gql('WHERE city=:1', city_object)
感謝@systempuntoout您的答覆。如果我把country_name放在城市模型中,那麼我是否應該保留UserReportedCountry模型? – bhavesh 2011-04-19 11:39:11
它確實取決於你的應用程序是否值得保留;我的意思是,例如,如果您的應用程序在組合中顯示國家/地區列表,您仍然可以使用UserReportedCountry模型閱讀國家/地區列表。 – systempuntoout 2011-04-19 12:26:11