根据用户进行过滤时如何满足“AnonymousUser”的要求

Jam*_*ods 5 django django-views

我有以下型号

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

以及以下视图(控制器)

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})
Run Code Online (Sandbox Code Playgroud)

当用户登录时,这非常有效,但我在以匿名用户身份进行测试时收到以下错误。

Exception Value: int() argument must be a string or a number, not 'AnonymousUser'
Run Code Online (Sandbox Code Playgroud)

我如何满足匿名用户的需求?这是在我的模板或视图中处理的吗?

任何有关如何实现这一目标的建议将不胜感激。

Jam*_*ods 4

我想我可以通过修改我的视图来解决这个问题:

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', {})
Run Code Online (Sandbox Code Playgroud)

这是不返回任何内容的最佳实践吗?我现在如何在模板中处理这个问题?

  • 小心,[`user.is_active`](http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.is_active) 与 [`user.is_active] 不同。 is_authenticated()`](http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.is_authenticated)。另外,例如,您可以为匿名提供一些其他模板,而不是在模板中进行额外检查。 (2认同)