2016-08-10 4 views
0

現在、次の問題に取り組んでいます。ユーザーはtest.com/BlogPostTitleページにアクセスできます。ここで、BlogPostTitleはスラグです。フィッティングタイトルのブログ投稿が存在する場合、Djangoはそのブログ投稿のDetailViewを表示する必要があります。存在しない場合、Djangoはブログ投稿を作成するためのフォームをレンダリングする必要があります。Djangoアクセス要求。クラスベースのビュー

これは、これまでの作品:

class EntryDetail(DetailView): # Displays blog entry, if it exists 
    model = Blog 
    slug_field = 'title' 
    template_name = 'app/entry.html'  

class EntryForm(FormView): # Displays form, if entry 404s 
    template_name = 'app/create.html' 
    form_class = EntryForm 
    success_url = '/' 

    def form_valid(self, form): 
     form.save() 
     return super(EntryForm, self).form_valid(form) 

class EntryDisplay(View): 
    def get(self, request, *args, **kwargs): 
     try: 
      view = EntryDetail.as_view() 
      return view(request, *args, **kwargs) 
     except Http404: 
      if check_user_editor(self.request.user) == True: # Fails here 
       view = EntryForm.as_view() 
       return view(request, *args, **kwargs) 
      else: 
       pass 

さて、グループに属しているユーザーのみ、「エディタ」は、フォームが/ポストを作成する見ることができるはずです。

def check_user_editor(user): 
    if user: 
     return user.groups.filter(name="editor").exists() # Returns true, if user in editor group 
    else: 
     return False⋅ 

することができますように私はEntryDisplayの関数を実装しましたが、Djangoのエラー'User' object is not iterableは実装されています。

私はSingleObjectMixinで作業していると思いますが、それについてのドキュメントはあまり理解していません。

ご協力いただければ幸いです。

完全トレースバック:

トレースバック:

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/detail.py" in get_object 
    53.    obj = queryset.get() 

File "/home/django/local/lib/python3.4/site-packages/django/db/models/query.py" in get 
    385.     self.model._meta.object_name 

During handling of the above exception (Blog matching query does not exist.), another exception occurred: 

File "/home/django/mediwiki/mediwiki/views.py" in get 
    68.    return view(request, *args, **kwargs) 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch 
    88.   return handler(request, *args, **kwargs) 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/detail.py" in get 
    115.   self.object = self.get_object() 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/detail.py" in get_object 
    56.       {'verbose_name': queryset.model._meta.verbose_name}) 

During handling of the above exception (No blog found matching the query), another exception occurred: 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/base.py" in _legacy_get_response 
    249.    response = self._get_response(request) 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/django/local/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch 
    88.   return handler(request, *args, **kwargs) 

File "/home/django/mediwiki/mediwiki/views.py" in get 
    74.     view = HttpResponse(request.user) 

File "/home/django/local/lib/python3.4/site-packages/django/http/response.py" in __init__ 
    293.   self.content = content 

File "/home/django/local/lib/python3.4/site-packages/django/http/response.py" in content 
    319.    content = b''.join(self.make_bytes(chunk) for chunk in value) 

File "/home/django/local/lib/python3.4/site-packages/django/utils/functional.py" in inner 
    235.   return func(self._wrapped, *args) 

Exception Type: TypeError at /test 
Exception Value: 'User' object is not iterable 
+1

がフルトレースバックであなたの質問を更新してください。 – knbk

+0

@knbkはい、もちろんです。私はこれが役立つことを願っています – theCed7

答えて

0

あなたのエラーがmediwiki.viewsにライン74である:

view = HttpResponse(request.user) 

HttpResponseは、文字列または反復可能を期待しています。 request.userは文字列ではないので、iterableとして使用しようとすると失敗します。

実際のコードがなくてもあまり言い表せません。実際にあなたが応答として、ユーザの単なる文字列表現を送信するためにをしたい場合は、文字列にあるキャストする必要があります。

view = HttpResponse(str(request.user)) 
+0

ああ、おっぱい!つまり、デバッグのために追加されたのは実際にバグの原因となっていました。 'request.user'が呼び出し可能であったかどうかをチェックし、文字列を忘れたかったのです。良いキャッチ、ありがとう! – theCed7

0

は、エラーがテンプレートのレンダリングで発生しましたか?もしそうなら、あなたは単一のUserオブジェクトの属性に対してiterを作ったのだろうか?私はあなたがuser.values()を必要とするかもしれないと思う。

ところで、check_user_editorは単純でなければなりません:

def check_user_editor(user): 
    return user.groups.filter(name="editor").exists() 
関連する問題