更改后的课程功能不起作用

时间:2017-06-26 07:46:51

标签: python django

关于从ContentDetailView到IndexView的注释的剪切功能后,我无法运行我的服务器,它不起作用。

class IndexView(AllAdsViewMixin, ListView):
model = UserContent
template_name = 'user_content/list.html'
context_object_name = 'usercontent'

def get_queryset(self):
    """Return the last all five published contents"""
    return UserContent.objects.filter(state='1').order_by('-published')[:5]

def get_context_data(self, **kwargs):
    content_type = self.object.get_content_type
    initial_data = {
        'content_type': content_type,
        'object_id': self.object.id,
    }

    comment_form = CommentForm(initial=initial_data)
    comments = Comment.objects.filter(
        content_type=content_type,
        object_id=self.object.id
    )

    context = super(IndexView, self).get_context_data(**kwargs)
    context['comments'] = comments
    context['comment_form'] = comment_form

    return context

def post(self, request, **kwargs):
    self.object = self.get_object()
    content_type = self.object.get_content_type
    comment_form = CommentForm(request.POST)

    if comment_form.is_valid():
        content_data = comment_form.cleaned_data.get('content')
        parent_obj = None
    try:
        parent_id = int(request.POST.get('parent_id'))
    except:
        parent_id = None

    if parent_id:
        parent_qs = Comment.objects.filter(parent__id=parent_id)
        if parent_qs.exists() and parent_qs.count() == 1:
            parent_obj = parent_qs.first()

    new_comment, created = Comment.objects.get_or_create(
        user=request.user,
        content_type=content_type,
        object_id=self.object.id,
        content=content_data,
        parent=parent_obj
    )

    return self.get(request, **kwargs)

错误:

'IndexView' object has no attribute 'object'

有人可以帮助我吗?

当函数在ContentDetailView类中时,它可以工作。 ContentDetailView类具有相同的模型,template_name和context_object_name。

1 个答案:

答案 0 :(得分:2)

您的ContentDetailView课程继承自DetailView,但您的IndexView继承自ListView

如果您查看List View的文档,就可以看到没有名为get_object()的方法。与文档一样,

  

列表视图呈现一些对象列表,由self.modelself.queryset设置。   self.queryset实际上可以是任何可迭代的项目,而不仅仅是查询集。

因此,您在视图中引用的self.object不存在。

但是在Detail View的情况下,如果你查看文档,

  

DetailView呈现对象的“细节”视图。

     

默认情况下,这是从self.queryset查找的模型实例,但是。{   view将支持通过覆盖self.get_object()来显示任何对象。

您在IndexView中实施的逻辑显然是错误的。 您需要先查看文档。