Я использую Django Channels 2.1.2 с моим проектом Django 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)