2017-04-21 18 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) 

ビュー 012:それはこのライン不満だ

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 *トレースバックを質問に含めてください。 – Alasdair

+0

@Alasdair完了! –

+0

これ以外の 'user = request.user.id'は他のフィルタで' user__id = request.user.id'を実行する必要はありません(ユーザがログインしている限り)。 – 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"ログインしています。その行を追加すると404が返されますが、他のものはどのように動作させるのですか?ビューやテンプレートには入りますか? –

+1

'login_required'デコレータは、ログインしていなければ、ユーザをログインページにリダイレクトします。' LOGIN_URL'設定とログインビューが正しく設定されていない場合は、404が表示されることがあります。修正できない場合は、新しい質問をしてください。 – Alasdair

関連する問題