Я создал простое приложение для обмена сообщениями, в котором пользователи могут отправлять друг другу сообщения. я выбрал, чтобы создать это сообщение вместо того, чтобы использовать плагин, потому что она свободно позволяет мне настроить кодОшибка дублирования сообщений Django Message
Я создал 2 функции, вызываемые сообщения и читать, функция сообщений отображает все сообщения и имеет флажок, связанные с его помощью, чтобы позволить пользователю удалить объект сообщения, а функция чтения захватывает первичный ключ из шаблона, который отображает все сообщения и получает объект и фильтрует все объекты для этого потока.
Как я отслеживаю ответные сообщения, они связаны с конкретной моделью потока. и поскольку каждое сообщение является отметкой времени, если 2 пользователя ответили друг другу на сообщения, я бы показал все сообщения, связанные с этим разговором, путем фильтрации только предыдущих сообщений и последнего сообщения для этого разговора.
Вот сложная проблема, и я благодарен за тех, кто помогает мне
Я нарисовал схему, чтобы объяснить мое положение
Эта фотография является функция сообщения, которое отображает всю картину и позволяют пользователю удалить свое сообщение
Это схема со ссылкой на вторую функцию, называемую чтения
http://s21.postimg.org/ribpiuwnb/image.jpg
class Thread(models.Model):
subject = models.CharField(max_length=100, blank=True)
user = models.ForeignKey(User)
class Message(models.Model):
user = models.ForeignKey(User, related_name='sender')
recipient = models.ForeignKey(User, related_name='recipient')
created = models.DateTimeField(auto_now_add=True)
body = models.CharField(max_length=1000)
read = models.BooleanField(default=False)
sentmessage = models.BooleanField(default=False)
thread = models.ForeignKey(Thread)
draft = models.BooleanField(default=False)
просмотров
@login_required
def message(request):
messages = Message.objects.filter(recipient=request.user).order_by("-created")
person = Person.objects.get(user=request.user)
if request.method =='POST':
delete_list = request.POST.get('hidden_field', False)
if delete_list:
values = [int(i) for i in delete_list.split("~")]
m = Message.objects.filter(pk__in=values)
m = m.filter(recipient=request.user)
m.delete()
return HttpResponseRedirect(reverse('world:message'))
return render(request,'messages.html',{'messages':messages,'person':person})
@login_required
def read(request,id):
try:
messages = Message.objects.get(pk=id,recipient=request.user)
except Message.DoesNotExist:
return HttpResponseRedirect(reverse('world:Display'))
messages.unread = True
messages.save()
if request.method =='POST':
form = ReplyForm(request.POST)
if form.is_valid():
id = request.POST.get('hidden_field', False)
try:
messages = Message.objects.get(pk=id ,recipient=request.user)
except Message.DoesNotExist or Thread.DOesNotExist:
return HttpResponseRedirect(reverse('world:LoginRequest'))
body = form.cleaned_data['body']
Message.objects.create(user=request.user,recipient=messages.user,body=body,thread=messages. thread,sentmessage=True,read=True)
return HttpResponseRedirect(reverse('world:message'))
message = Message.objects.filter(thread=messages.thread).filter(created__lte=messages.created)
person = Person.objects.get(user=request.user)
initial = {}
initial.update({'hidden_field': messages.id})
form = ReplyForm(initial=initial)
return render(request,'read.html',{'messages':messages,'form':form,'message':message,'person':person})
message.html
<form method="POST" >
{% csrf_token %}
{% for m in messages %}
<a class="theLink" href="{% url "world:read" m.id %}" >
<div class="username">{{m.user.username}}</div></a>
<div class="description">{{m.body}}</div><div id="container"> </div>
<input type="checkbox" value="{{m.id}}" class="messages id_check" >
<input type="hidden" value="" id="hidden_field" name="hidden_field" />
<input type = "button" id="deleteBttn" value= "Delete" class="box21"/>
{% endfor %}
</form>
</div>
read.html
{% for m in message %}
<div class="wrapper">
<div class="user">{{m.user.username}} </div>
<div class="message">{{m.body}}</div>
</div>
{% endfor %}
<form method="POST" >{% csrf_token %}
{{form.body}}{{form.hidden_field}}
<input type = "submit" value= "send" class="sen"/>
</form>
<input type = "submit" value= "save" class="save"/>
Если сообщения были ответил назад и вперед, и моя функция сообщения отображает все непрочитанные сообщения, а также позволяет пользователю удалить свое собственное сообщение. Если он удалит объект, связанный с продолжающимся разговором, его действие будет действовать для обоих пользователей, потому что другой пользователь не сможет прочитать удаленное сообщение, которое предположительно будет связано с разговором. Как я могу это решить?
Спасибо
В теме? Из того, что я понял, должно быть сообщение. –
@ J.C.Leitão Упс, ты прав. Я отредактирую исправление. –
спасибо, что помог мне. Я ценю каждую секунду за вашу доброту. Я просто исправляю это сейчас – JackRoster