2016-08-10 94 views
0

我目前正在解決以下問題:用戶可以訪問頁面test.com/BlogPostTitleBlogPostTitle是一個slu Where。如果存在帶有擬合標題的Blog帖子,則Django應呈現所述博客文章的DetailView。如果它不存在,Django應該呈現一個表單來創建博客文章。Django在基於類的視圖中訪問request.user

到目前爲止是這種情況:

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

你的錯誤是在第74行mediwiki.views

view = HttpResponse(request.user) 

HttpResponse需要一個字符串或可迭代。由於request.user不是字符串,因此它會嘗試將其用作迭代器,失敗。

我不能說沒有實際的代碼太多。如果事實上你送不僅僅是用戶的字符串表示的反應,你需要轉換爲字符串:

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

啊,笨蛋!事實證明,爲調試目的添加的內容實際上是造成錯誤本身。我想檢查'request.user'是否可以被調用,並且忘記將它串起來。很好,非常感謝! – theCed7

0

在模板渲染髮生了錯誤?如果是這樣的話,我想知道你在單個的User對象上的屬性。我想你可能需要user.values()

BTW,check_user_editor應該是簡單的:

def check_user_editor(user): 
    return user.groups.filter(name="editor").exists() 
相關問題