2013-04-12 42 views
0

我有一個應用程序託管在應用程序引擎上。它與UserProperty(如下圖)沿着某些字段:通過App Engine數據存儲中的用戶電子郵件過濾記錄?

class Post(db.Model): 
    title = db.StringProperty(required=True) 
    created_by = db.UserProperty(required=True) 
    ...#some other fields 

我試圖通過篩選CREATED_BY場的記錄,這樣的應用程序將顯示創建的記錄在用戶登錄。我嘗試過:

p = Post.all() 
p.filter('created_by =', users.get_current_user()) 

哪一個不工作。請幫忙。

+0

當問一個問題你應該descr ibe它是如何不工作的,你會得到一個錯誤,沒有結果,結果,但不是你期望的結果?說完所有這些之後,您使用數據存儲區查看器調查了存儲在UserProperty中的內容。 –

+0

我沒有得到任何錯誤,但沒有結果。並且在數據存儲「created_by」列中有用戶的電子郵件ID。順便說一句,我使用'users.get_current_user()',同時填充'created_by'字段。即使在發出p.filter('created_by =''')後,也沒有結果(p.count()爲0) – rajpy

+0

考慮切換到[NDB](https://developers.google.com/appengine/docs/python/ndb /) – Lipis

回答

1

如果您的登錄用戶沒有單獨的模型,您應該在帖子中還存儲user_id而不是email,因爲前者更獨特。

只需增加一個字段中Post

class Post(db.Model): 
    title = db.StringProperty(required=True) 
    created_by = db.UserProperty(required=True) 
    user_id = db.StringProperty(required=True) 
    ... 

而且在Post創造做這樣的事情:

post_db = Post(title='Hello world', 
       created_by=users.get_current_user(), 
       user_id=users.get_current_user().user_id()) 

現在,如果你想顯示由記錄所做的所有帖子在用戶你應該:

p = Post.all() 
p.filter('user_id =', users.get_current_user().user_id()) 
+0

我剛剛發現,created_by擁有用戶實例,因爲我在創建帖子時使用了'created_by = users.get_current_user()'。我感到困惑的是Datastore查看器在created_by字段中顯示用戶的電子郵件ID。我將通過存儲額外的字段來使用你的方法。 但我沒有得到爲什麼user_id比電子郵件ID更獨特? – rajpy

+0

@rajpy實際上在你的案例中是一樣的,因爲你不會在你的應用中以任何方式改變它。但通常在應用程序內,實際用戶的電子郵件可能會發生變化,因此您絕對不應該依賴電子郵件來獲得唯一性。這只是不好的做法.. – Lipis

相關問題