我正在尝试使用自定义UserModel创建一个简单的邮件收件箱应用,而不使用插件,因为它允许我自由地自定义它。
我创建了下面的模型,我弄清楚如何向收件人显示邮件,但我无法弄清楚如何创建一个函数来显示用户发送的回复邮件。
例如,我发了一条消息。您回复了以下消息:如果回复继续,我如何显示回复的消息,包括原始消息和所有其他消息。
此示例显示我如何阅读用户发送的单条消息。
模型
class Message(models.Model):
user = models.ForeignKey(User)
recipient = models.ForeignKey(User)
subject = models.CharField(max_length=100)
body = models.CharField(max_length=1000)
read = models.BooleanField(default=False)
trash = models.BooleanField(default=False)
sentmessage = models.BooleanField(default=False)
视图
def Messages(request,id):
user = User.objects.get(user=request.user)
message = Message.objects.filter(pk=id,user=user)
render (request,'message.html'{'message':message})
模板
{{message.user}}
{{message.subject}}
{{message.body}}
答案 0 :(得分:2)
您可以在ForeignKey
模型上为'self'
创建Message
字段,可以将其称为in_response_to
。并且,每次有响应时,创建一个新对象,并将FK字段分配给此回复发送到的消息。您必须优雅地处理对同一消息的多个响应。
class Message(models.Model):
user = models.ForeignKey(User, related_name='sender')
recipient = models.ForeignKey(User, related_name='recipient')
subject = models.CharField(max_length=100)
body = models.CharField(max_length=1000)
read = models.BooleanField(default=False)
trash = models.BooleanField(default=False)
sentmessage = models.BooleanField(default=False)
in_response_to = models.ForeignKey('self', null=True, blank=True)
您可能还想添加created
和updated
时间戳,以跟踪发送的邮件的顺序。
此外,请注意,related_name
上的FK需要User
,否则django会抛出错误
现在,在检索时,获取fk对象直到它为None
或blank
在最简单的形式中,您可以编写模型方法:
class Message(models.Model):
#attributes here
def get_all_in_reponse_to(self):
obj = self.in_response_to
response = ''
while obj:
response += obj.body
obj = obj.in_response_to
return response.
更简单的方法(就像你建议的那样):
class Message(models.Model):
#attributes here
def get_all_in_reponse_to(self):
response_objects = self.in_response_to.message_set.order_by('-created')
for obj in response_object:
response += obj.body
return response.
我会让你弄清楚格式等很简单