我在我的Django 2项目中使用了Django Channels 2.1.2,并且需要一些帮助来配置仅在用户实际发送消息时才保存的线程。
现在,如果用户单击chat
,他们将转到聊天消息页面,并且该线程已创建并保存在其收件箱中。
即使他们决定不结束消息传递,两个用户收件箱中仍然可以看到空聊天。
仅在任一用户发送消息后才需要保存线程。
有人不确定我该怎么做吗?我认为此行需要以某种方式修改obj, created = Thread.objects.get_or_new(self.request.user, other_username)
views.py
class 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)
答案 0 :(得分:1)
They are multiple ways of doing this:
答案 1 :(得分:0)
问题是用户和models中的other_username之间的比较。py总是返回None,因为它们是相等的
def get_or_new(self, user, other_username): # get_or_create
username = user.username
if username == other_username: <-----
return None
在views.py上,您可以创建一个虚拟用户进行比较,该代码将起作用
def get_object(self):
other_username = "user1" <------
obj, created = Thread.objects.get_or_new(self.request.user, other_username)