Python 暂时保存ID列表(Django)
我有一个用户可以创建消息的应用程序。他们必须从数据库中的联系人中选择收件人。消息发布时,所选联系人用于创建消息收件人。以下是应用程序中模型的简化示例:Python 暂时保存ID列表(Django),python,django,Python,Django,我有一个用户可以创建消息的应用程序。他们必须从数据库中的联系人中选择收件人。消息发布时,所选联系人用于创建消息收件人。以下是应用程序中模型的简化示例: from django.db import models class Message(models.Model): DRAFT = 0 PUBLISHED = 1 STATUS_CHOICES = ( (DRAFT, 'Draft'), (PUBLISHED, 'Published'),
from django.db import models
class Message(models.Model):
DRAFT = 0
PUBLISHED = 1
STATUS_CHOICES = (
(DRAFT, 'Draft'),
(PUBLISHED, 'Published'),
)
message = models.TextField(null=False, blank=False)
subject = models.CharField(max_length=255)
status = models.IntegerField(choices=STATUS_CHOICES, default=DRAFT)
class Contact(models.Model):
email = models.CharField(max_length=255)
class MessageRecipient(models.Model):
recipient = models.ForeignKey(Contact, related_name='messages')
message = models.ForeignKey(Message, related_name='recipients')
如果用户将消息保存为草稿并决定离开表单,我希望他们返回并查看他们之前选择的联系人是否已预选。他们可能还想更改他们的选择,因此我认为最好在消息完全提交和发布之前避免创建MessageRecipient实例。我想这意味着我必须保存一个联系人PK列表,并将其作为草稿附在邮件中。关于临时保存此联系人PK列表的方法有什么建议吗?为什么不在您的
邮件
模型中添加一个字段,例如状态
(在草稿/已发送/其他内容之间选择)或是草稿
?我编辑了我的代码,以表明我已经在保存邮件的“状态”,这不是问题。我只是不知道如何保存附加在邮件中的联系人PK列表。那么我最初的问题是——为什么不直接使用它呢?我的意思是,在发送邮件之前是否创建了收件人真的很重要吗?如果要对“收到邮件”的收件人运行报告,可以加入邮件模型并检查其状态(例如,MessageRecipient.objects.filter(message\uu status='Published')
),否?我只希望用户在将表单保存为草稿并返回后能够离开表单,他们选择的联系人将被预先选择。同样,这可以通过允许他们将MessageRecipient
模型保存到数据库中来实现。只需检查消息
模型的状态,即可将其显示为草稿或已发布。显然,视图代码只应在用户发送消息(即,它不再是草稿)时以电子邮件的形式发送消息。保存联系人
pks的列表不会给您带来任何好处,事实上会降低您的速度,因为您必须执行两个单独的查询。而是保存MessageRecipient
模型并利用数据库联接。为什么不在Message
模型中添加一个字段,例如state
(草稿/已发送/其他内容)或is_draft
?我编辑了代码以显示我已经在保存消息的“状态”,这不是问题所在。我只是不知道如何保存附加在邮件中的联系人PK列表。那么我最初的问题是——为什么不直接使用它呢?我的意思是,在发送邮件之前是否创建了收件人真的很重要吗?如果要对“收到邮件”的收件人运行报告,可以加入邮件模型并检查其状态(例如,MessageRecipient.objects.filter(message\uu status='Published')
),否?我只希望用户在将表单保存为草稿并返回后能够离开表单,他们选择的联系人将被预先选择。同样,这可以通过允许他们将MessageRecipient
模型保存到数据库中来实现。只需检查消息
模型的状态,即可将其显示为草稿或已发布。显然,视图代码只应在用户发送消息(即,它不再是草稿)时以电子邮件的形式发送消息。保存联系人
pks的列表不会给您带来任何好处,事实上会降低您的速度,因为您必须执行两个单独的查询。而是保存MessageRecipient
模型并利用数据库联接。