2010-08-09 45 views
3

當滿足「AnonymousUser」我有以下的模型如何濾波基於用戶

class Team(models.Model): 
    name = models.CharField(max_length=100) 
    members = models.ManyToManyField(User, related_name="members", blank=True, null=True) 

而下面的視圖(控制器)

def my_teams(request): 
    my_list = Team.objects.filter(members=request.user).order_by('name') 
    return render_to_response('teams/index.html', {'my_list': my_list}) 

當用戶登錄這個工作太棒了,但在作爲匿名用戶進行測試時收到以下錯誤。

Exception Value: int() argument must be a string or a number, not 'AnonymousUser' 

如何照顧匿名用戶?這是在我的模板或視圖處理?

任何意見如何實現這一點將不勝感激。

回答

3

我想我可以通過修改我的看法是類似解決這個問題:

def my_teams(request): 
    if request.user.is_authenticated(): 
     my_list = Team.objects.filter(members=request.user).order_by('name') 
     return render_to_response('teams/index.html', {'my_list': my_list}) 
    else: 
     return render_to_response('teams/index.html', {}) 

是回到什麼是這個最佳做法?我現在將如何在我的模板中處理這個問題?

+1

您也許可以使用['@ login_required'](http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator)修飾符禁止訪問匿名用戶。如果你只想在正確的軌道上返回其他東西。 – 2010-08-09 12:24:26

+0

感謝rebus--這可能會在稍後派上用場。對於這個特定的觀點,我爲匿名視圖感到高興(我已經留下了一些代碼,使它更容易問我的問題,而不會讓人困惑)。 好吧,爲了迎合is_autenticated()= false並因此不返回任何內容的情況,我在模板中添加了一個條件:'{%if user.is_active%}'。 這應該顯示用戶通過身份驗證時返回的內容,否則會隱藏並且用戶只能看到頁面上的匿名內容。我希望這是有道理的。 – 2010-08-09 12:29:21

+2

小心,['user.is_active'](http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.is_active)與['user .is_authenticated()'](http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.is_authenticated)。另外,例如,而不是模板中的額外檢查,您可以爲匿名服務一些其他模板。 – 2010-08-09 12:36:05