如何解决使用邮件标题信息对django中的电子邮件线程进行排序
|| 我有一个存储电子邮件线程的django应用程序。当我从mbox解析原始电子邮件并将其插入数据库时,我会包含电子邮件标头参数\'message-id \'和\'in-reply-to \'。 message-id是标识消息的唯一字符串,而in-reply-则标识给定消息响应的消息。 这是我模型的消息部分:class Message(models.Model):
subject = models.CharField(max_length=300,blank=True,null=True)
mesg_id = models.CharField(max_length=150,null=True)
in_reply_to = models.CharField(max_length=150,null=True)
orig_body = models.TextField(blank=True,null=True)
目标是能够以类似于gmail的线程格式显示电子邮件对话。我打算仅使用邮件头中的message-id(模型中的mesg_id)和in-reply-to(模型中的in_reply_to)来跟踪邮件并进行线程化。
在审查了SO和Google之后,看来我应该使用django-treebeard或django-mptt之类的库来执行此操作。当我查看这两种解决方案中任何一种的文档时,似乎大多数模型都在使用外键关系,这使我感到困惑。
给定上面的示例模型,如何在我的应用程序中实现django-treebeard或django-mptt?是否可以使用mesg_id和in_reply_to字段?
解决方法
如果执行此操作,则可以尝试以下操作-使用django-mptt:
from mptt.models import MPTTModel,TreeForeignKey
class Message(MPTTModel):
subject = models.CharField(max_length=300,blank=True)
msg_id = models.CharField(max_length=150,blank=True) # unique=True) <- if msg_id will definitely be unique
reply_to = TreeForeignKey(\'self\',null=True,blank=True,related_name=\'replies\')
orig_body = models.TextField(blank=True)
class MPTTMeta:
parent_attr = \'reply_to\'
请注意,我已经将reply_to变成了ForeignKey。这意味着,如果我有一个Message实例msg
,我可以简单地执行msg.reply_to
访问它是回复的Message实例,或执行msg.replies.all()
获得对该消息的所有回复。
从理论上讲,您可以将msg_id用作主键字段。我个人更喜欢将数据与主键分开,但是我不知道有什么理由认为我的方法更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。