关于从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。
答案 0 :(得分:2)
您的ContentDetailView
课程继承自DetailView
,但您的IndexView
继承自ListView
。
如果您查看List View的文档,就可以看到没有名为get_object()
的方法。与文档一样,
列表视图呈现一些对象列表,由
self.model
或self.queryset
设置。self.queryset
实际上可以是任何可迭代的项目,而不仅仅是查询集。
因此,您在视图中引用的self.object
不存在。
但是在Detail View的情况下,如果你查看文档,
DetailView呈现对象的“细节”视图。
默认情况下,这是从
self.queryset
查找的模型实例,但是。{ view将支持通过覆盖self.get_object()
来显示任何对象。
您在IndexView
中实施的逻辑显然是错误的。
您需要先查看文档。