我试图让用户从他们的收件箱中删除与另一个用户的线程。我已经关注了 Django Docs,DeleteView尽管这可能是完全错误的。views.pyclass InboxView(LoginRequiredMixin, ListView): template_name = 'chat/inbox.html' context_object_name = 'threads' def get_queryset(self): return Thread.objects.by_user(self.request.user).order_by('-timestamp') # by_user(self.request.user)class ThreadView(LoginRequiredMixin, FormMixin, DetailView): template_name = 'chat/thread.html' form_class = ComposeForm success_url = '#' def get_queryset(self): return Thread.objects.by_user(self.request.user) def get_object(self): other_username = self.kwargs.get("username") obj, created = Thread.objects.get_or_new(self.request.user, other_username) if obj == None: raise Http404 return obj def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['form'] = self.get_form() return context def post(self, request, *args, **kwargs): if not request.user.is_authenticated: return HttpResponseForbidden() self.object = self.get_object() form = self.get_form() if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) def form_valid(self, form): thread = self.get_object() user = self.request.user message = form.cleaned_data.get("message") ChatMessage.objects.create(user=user, thread=thread, message=message) return super().form_valid(form)class ThreadDeleteView(DeleteView): model = Thread success_url = reverse_lazy('inbox')带有删除按钮的html线程页面<!-- Delete Thread --> <form action="{% url 'chat:thread_delete' user.username %}" method='post'> {% csrf_token %} <button type='submit' class='btn btn-light'> <i class="fas fa-trash-alt" style="color:royalblue"></i> </button> </form>urls.py
1 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
我认为这里的问题是你的get_or_new()方法中有一个没有返回元组的 return 语句:
if username == other_username: return None
这会导致视图崩溃,因为它期望将元组解包为两个变量。返回一个元组应该解决:
if username == other_username: return None, None
添加回答
举报
0/150
提交
取消
