2010-07-04 33 views
3

我正在製作一些查看函數來計算社區中一個用戶的排名。 我的問題是,我想顯示排名傳入每個用戶,在其個人資料,我不知道如何,因爲我沒有;沒有請求和render_to_response(因爲我猜他們不需要) 我的代碼:django調用模板中沒有請求查看功能

def calculate_questions_vote(request): 
    useranswer = Answer.objects.filter (answer_by = request.user) 
    positive_votes = VoteUpAnswer.objects.filter(answer = useranswer) 
    negative_votes = VoteDownAnswer.objects.filter(answer = useranswer) 
    question_vote_rank = sum(positive_votes) - sum(negative_votes.count) 
     return question_vote_rank 

def calculate_replies(request): 
    the_new = News.objects.filter(created_by = request.user) 
    reply = Reply.objects.filter(reply_to = the_new) 
    reply_rank = sum(reply) 
     return reply_rank 

def calculate_votes(request): 
    the_new = News.objects.filter(created_by = request.user) 
    vote = Vote.objects.filter(voted = the_new) 
    vote_rank = sum(vote) 
     return vote_rank 

def personal_rank(request): 
    personal_rank = question_vote_rank + reply_rank + vote_rank 
     return personal_rank 

和的UserProfiles:

user = request.user 
personal_rank = calculate_questions_vote(user) + calculate_replies(user) + personal_rank(user) 

,但我的錯誤是:

錯誤綁定參數0 - 可能是不支持的類型。

mt方法是否正確?我應該如何在profile_view def中調用rank函數?

謝謝!

回答

5

YOu可以調用您的視圖中的功能,如rank = personal_rank(reuest.user),然後將rank添加到您的上下文中。
我不會調用這個函數「view」函數,因爲它們沒有處理請求,也不會返回HttoResponce;他們更「輔助」功能,如果他們正在處理單獨的實體(例如新聞&投票)也不屬於模型。他們的下降地點將是例如。 utils.py。你可以從views.py那裏導入它們,並以用戶的身份作爲參數調用它們(如果它的實際用戶是request.user)。
它是有道理的,你不能從任何地方訪問request,因爲這迫使你保持更多的類似mvc的設計,如果你需要請求你需要從你的原始視圖功能傳遞它的地方! 你應該改變你的最後一個功能:

def personal_rank(user): 
    personal_rank = calculate_questions_vote(user) + \ 
        calculate_replies(user) + \ 
        calculate_votes(user) 
    return personl_rank 

你也可以,如果你有類似的東西,然後調用如加上這最後的功能,您的用戶或用戶配置模型類。 my_user.personal_rank()my_user.get_profile().personal_rank()

+1

+1將這些函數添加到UserProfile類。 – 2010-07-04 19:17:02

+0

非常感謝您的幫助! – dana 2010-07-04 19:21:05

+0

問題:如果我按照描述添加personal_rank函數到userProfiles,並按照描述返回變量(不在上下文中),如果我在模板傳入userProfile中調用它,它不會顯示任何內容......我如何使userProfile模板知道我的變量personal_rank? 謝謝! – dana 2010-07-05 18:40:24

3

lazerscience爲你的猜測給了很好的解釋。我只想指出一些可能的性能問題。

請注意,爲每個用戶調用此方法會產生7個查詢。如果您的案例將顯示所有用戶的排名,則可能需要很長時間。我建議做一些緩存(就像在StackOverflow中)。有很多選擇這裏,比如你可以特殊排名字段分配給一個User模型(或UserProfile如果Userauth.User),其中你可以只是一些操作之後,存儲precalaculated等級(計算像新聞保存或在某些預定的時間間隔)。

相關問題