2017-04-21 89 views
0

我正在创建用户创建的所有帖子的摘要页面,并将这些帖子返回到摘要页面。我得到上面的错误?'AnonymousUser'对象不可迭代? Django

它抱怨这一行:

查看

def aircraft_create(request): 
    form = aircraft_form(request.POST or None) 
    if form.is_valid(): 
    instance = form.save(commit=False) 
    instance.user = request.user 
    instance.save() 
    messages.success(request, "Your upload has been successfully added!") 
    return HttpResponseRedirect(instance.get_absolute_url()) 
    else: 
    messages.error(request, "There seems to be something wrong. Have a look again..!") 
    context = {"form":form,} 
    return render(request,'aircraft/aircraft_form.html', context) 

型号

class Aircraft(AircraftModelBase): 
    user = models.ForeignKey(User) 
    manufacturer = SortableForeignKey(Manufacturer) 
    aircraft_type = SortableForeignKey(AircraftType) 

查看

def account_overview(request): 
    fav_aircraft = FavoritedAircraft.objects.filter(user__id=request.user.id) 
    fav_airline = FavoritedAirline.objects.filter(user__id=request.user.id) 

    uploaded_aircraft = Aircraft.objects.filter(user=request.user) 

    return render(request,'account/account_overview.html', {'favAircraft':fav_aircraft, 
                  'favAirline':fav_airline, 
                  'UploadedAircraft':uploaded_aircraft}) 

回溯

Traceback (most recent call last): 
    File "/home/csunix/scpython/lib/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/csunix/scpython/lib/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/cserv1_a/soc_ug/sc13nh/env/v10/accounts/views.py", line 57, in account_overview 
    uploaded_aircraft = Aircraft.objects.filter(user=request.user) 
    File "/home/csunix/scpython/lib/django/db/models/manager.py", line 122, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/home/csunix/scpython/lib/django/db/models/query.py", line 790, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/home/csunix/scpython/lib/django/db/models/query.py", line 808, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/home/csunix/scpython/lib/django/db/models/sql/query.py", line 1243, in add_q 
    clause, _ = self._add_q(q_object, self.used_aliases) 
    File "/home/csunix/scpython/lib/django/db/models/sql/query.py", line 1269, in _add_q 
    allow_joins=allow_joins, split_subq=split_subq, 
    File "/home/csunix/scpython/lib/django/db/models/sql/query.py", line 1174, in build_filter 
    self.check_related_objects(field, value, opts) 
    File "/home/csunix/scpython/lib/django/db/models/sql/query.py", line 1073, in check_related_objects 
    for v in value: 
    File "/home/csunix/scpython/lib/django/utils/functional.py", line 205, in inner 
    return func(self._wrapped, *args) 
TypeError: 'AnonymousUser' object is not iterable 

什么,似乎这里是实际的问题?

+1

如果您有错误,请在您的问题中包含* full * traceback。 – Alasdair

+0

@Alasdair完成! –

+0

另一方面,你不应该在你的其他过滤器中需要'user_id = request.user.id' user = request.user'应该可以正常工作(只要用户登录)。 – Alasdair

回答

3

错误是告诉你request.user是匿名用户。这意味着他们没有登录,因此尝试使用filter(user=request.user)进行过滤是没有意义的。

最简单的修复方法是使用login_required装饰器,以确保只有登录用户才能访问该视图。

from django.contrib.auth.decorators import login_required 

@login_required 
def account_overview(request): 
    ... 
+0

在我的模板中,我已经有了“{%if user.is_authenticated%} else”Please login“在添加该行后,它将返回一个404.如何获取其他工作?它是否在视图或模板中显示? –

+1

在模板中进行检查已经太迟了 - 过滤器已经在视图中出现了,login_required装饰器会将用户重定向到登录页面,如果他们没有登录。如果你的LOGIN_URL设置和登录视图是没有正确配置,那么你可能会得到404。如果你不能解决这个问题,那么请提出一个新的问题。 – Alasdair