How to cater for 'AnonymousUser' when filtering based on user

浪尽此生 提交于 2019-12-22 08:16:14

问题


I have the following model

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

And the following view (controller)

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})

This works fantastic when a user is logged in, but I receive the following error while testing as an Anonymous user.

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

How do I cater for Anonymous users? Is this handled in my template or view?

Any advice on how to achieve this would be greatly appreciated.


回答1:


I think I can solve this by modifying my view to be something like:

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', {})

Is this best practice to return nothing? How would I now handle this in my template?



来源:https://stackoverflow.com/questions/3439709/how-to-cater-for-anonymoususer-when-filtering-based-on-user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!