0

我正在尝试在模型管理器中创建自定义函数:

class MessageManager(models.Manager):
    # Return body from last child message
    def get_last_child_body(self):
        if self.has_childs:
            last_child = self.filter(parent_msg=self.id).order_by('-send_at')[0]
            return last_child.body

我想在模板中使用这个函数(“get_last_child_body”)

{% message.get_last_child_body %}

从插入到表消息中的最后一条子消息中检索正文。

消息模型:

class Message(models.Model):
    sender = models.ForeignKey(User, related_name='sent_messages')
    recipient = models.ForeignKey(User, related_name='received_messages')
    parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True)
    has_childs = models.BooleanField()
    subject = models.CharField(max_length=120)
    body = models.TextField()
    send_at = models.DateTimeField()
    read_at = models.DateTimeField(null=True, blank=True)
    replied_at = models.DateTimeField(null=True, blank=True)
    sender_deleted_at = models.DateTimeField(null=True, blank=True)
    recipient_deleted_at = models.DateTimeField(null=True, blank=True)

    objects = MessageManager()

    def get_last_child(self):
        if not self.has_childs:
            return None

    class Meta:
        get_latest_by = 'send_at'
        ordering = ['-send_at']

好吧,我猜问题出在管理器中自定义函数的“id”中。我必须传递父消息 ID,但我不知道该怎么做。

它不报告任何错误,只是在模板中不显示任何内容。

有任何想法吗?

4

1 回答 1

0

管理器应用于特定于模型的运算符。但是,在这里您正在执行特定于实例的操作,因此get_last_child_body应该在您的Message类中。

在您提到的评论中,您试图移动它。它应该工作,其他可能是错误的。您应该验证:

  1. 消息在模板中定义(例如使用 if 模板标签来记录结果)
  2. get_last_child_body 被调用(例如使用打印语句)
  3. 继续深入调试仍然没有结果(如果对您来说最简单,打印语句可以工作)
于 2012-05-13T22:49:58.180 回答