Django消息应用程序复制错误

Django消息应用程序复制错误,django,Django,我创建了一个简单的消息传递应用程序,用户可以在其中相互发送消息。 我选择创建这个消息而不是使用插件,因为它可以让我自由地自定义代码 我创建了两个函数,称为message和read,消息函数显示所有消息,并有一个与之关联的复选框,允许用户删除消息对象,读取函数从模板中捕获主键,该模板显示所有消息,获取对象并过滤该线程的所有对象。 我跟踪回复消息的方式是,它们与特定的线程模型相关。 因为如果两个用户不断回复彼此的消息,则每条消息都是时间戳,因此我将仅过滤该会话的先前消息和最近消息,以显示与该会话相关

我创建了一个简单的消息传递应用程序,用户可以在其中相互发送消息。 我选择创建这个消息而不是使用插件,因为它可以让我自由地自定义代码

我创建了两个函数,称为message和read,消息函数显示所有消息,并有一个与之关联的复选框,允许用户删除消息对象,读取函数从模板中捕获主键,该模板显示所有消息,获取对象并过滤该线程的所有对象。

我跟踪回复消息的方式是,它们与特定的线程模型相关。 因为如果两个用户不断回复彼此的消息,则每条消息都是时间戳,因此我将仅过滤该会话的先前消息和最近消息,以显示与该会话相关的所有消息

这是一个棘手的问题,我感谢所有帮助我的人

我画了一张图表来解释我的处境

此图片是消息功能,显示所有图片并允许用户删除自己的消息

这是第二个函数read的示意图

观点

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>

{%csrf_令牌%}
{消息%中的m为%0}
{{m.body}}
{%endfor%}
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"/>
{%m在消息%}
{{m.user.username}
{{m.body}}
{%endfor%}
{%csrf_令牌%}
{{form.body}{{form.hidden_field}
如果邮件被来回回复,“我的邮件”功能显示所有未读邮件,并允许用户删除自己的邮件。 如果他删除了一个与正在进行的对话相关的对象,这将影响两个用户,因为另一个用户将无法读取被删除的消息,而该消息本应与该对话相关。我怎样才能解决这个问题


谢谢

如果我正确理解了您的问题,您希望邮件的原始发件人能够删除邮件,但如果尚未阅读,收件人仍然能够查看该邮件

因此,不要在发起者点击删除按钮时删除消息,只需在消息已被删除时添加删除标记即可。例如,在
消息中添加另一个字段

is_deleted = models.BooleanField(default=False)
发端人的读取功能将在
被删除时进行过滤,而不显示这些消息。收件人不会在
已删除时进行筛选,因此会继续查看邮件。然后,您必须决定从数据存储中清除标记为
已删除的消息的策略。一旦收件人阅读了邮件,它可能会被自动删除


您已经有相当多的变量跟踪消息状态。也许将消息状态折叠为更少的枚举类型值是有意义的。

Django消息不适合您正在做的事情,因为它不适合用户。因此,消息不会在会话之间存储

据我所知,现在如果有人删除了该消息,它将从数据库中删除,因此其他人无法读取,这是您不希望看到的

我将用更简单的术语来解释您的问题:

您有三个模型,用户线程和消息。每个用户都有一组线程,每个线程都有一组消息。每封邮件都有一个发件人和一个收件人

现在,每封邮件都有一组自己的属性(例如草稿、正文)和一组自身与发件人或收件人之间关系的属性(例如,“read”不是邮件本身的属性,而是收件人与邮件之间关系的属性(“收件人已阅读邮件”))

您现在需要的也是发件人和邮件之间关系的一个属性(“发件人删除了邮件”)

与“阅读”一样,您应该具有两个属性:

is_deleted_by_sender = models.BooleanField(default=False)
is_deleted_by_recipient = models.BooleanField(default=False)
在“发件人/收件人邮件”视图中,检查该用户是否删除了该邮件。如果他删除了该邮件,它将不再出现在收件箱中。但是,由于邮件仍然存在,收件人/发件人(注意顺序)仍然可以阅读邮件

发件人和收件人都删除的邮件可以从数据库中删除。因此,计划的作业或删除其中一方(发送方和接收方)后,都可以触发从数据库中删除消息


这种方法实际上是一种更复杂方法的简化版本,您希望在此基础上定义两个模型(在本例中为用户和消息)关系的一组属性,这可以在Django中使用。

对线程执行?从我所理解的应该是信息。谢谢你奥斯汀也帮助了我。我感激你的每一秒。我现在正在解决奥斯汀,我想不出解决政策问题的办法。他们是否有其他方法可以删除邮件旁边的对象一旦邮件被收件人读取,它就可以自动删除?您可以有一个cron作业,定期在后台运行,以删除不再需要的任何邮件。每5分钟,删除所有标记为删除的邮件,每个人都已阅读,并确保保留最后N条邮件。这样,旧邮件会自动过期,但您始终可以获得一小部分最后发布的邮件。好的,我正在尝试描绘您的解决方案。如果我和你有一次谈话,我们回复了30次。我们都会永远删除与该对话相关的所有消息,但最后发送的消息除外。哈哈,最后发送的消息不会显示之前回复的所有消息,除了最后一条。我非常感谢你对我的帮助。一旦我解决了这个问题,我会尽快给你回复
is_deleted = models.BooleanField(default=False)
is_deleted_by_sender = models.BooleanField(default=False)
is_deleted_by_recipient = models.BooleanField(default=False)