首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用邮件头信息对django中的电子邮件线程进行排序

使用邮件头信息对django中的电子邮件线程进行排序
EN

Stack Overflow用户
提问于 2011-06-12 20:49:02
回答 1查看 350关注 0票数 1

我有一个django应用程序,存储电子邮件线程。当我解析来自mbox的原始电子邮件并将它们插入到数据库中时,我包含了电子邮件头参数'message-id‘和'in-reply-to’。message-id是标识消息的唯一字符串,in-reply-to标识给定消息所响应的消息。

以下是我的模型的消息部分:

代码语言:javascript
复制
class Message(models.Model):
    subject = models.CharField(max_length=300, blank=True, null=True)
    mesg_id = models.CharField(max_length=150, blank=True, null=True)
    in_reply_to = models.CharField(max_length=150, blank=True, 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字段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-13 14:02:44

如果我要实现它,我可能会尝试如下所示-使用django-mptt:

代码语言:javascript
复制
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。这意味着,如果我有一个消息实例msg,我可以简单地执行msg.reply_to来访问它所回复的message实例,或者执行msg.replies.all()来获得对该消息的所有回复。

理论上,您可以使用msg_id作为主键字段。我个人更喜欢将数据与主键分开,但我不知道有什么特别的理由认为我的方法更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6322024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档