0

我正在尝试使用自定义 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}}
4

1 回答 1

2

您可以在模型上创建一个ForeignKey字段来调用它。并且,每次有响应时,创建一个新对象,并将 FK 字段分配给该响应发送到的消息。您必须优雅地处理对同一消息的多个响应。'self'Messagein_response_to

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)

您可能还想添加createdupdated时间戳来跟踪发送消息的顺序。

另外,请注意您需要related_name在 FK 上打开,User否则 django 会抛出错误

现在,在检索时,获取 fk 对象直到它是Noneblank

以最简单的形式,您可以编写一个模型方法:

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.

我会让你弄清楚格式等,这很简单

于 2013-06-23T11:14:00.780 回答