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. メッセージはテンプレートで定義されています(たとえば、結果をログに記録するためにテンプレートタグを使用します)
  2. get_last_child_bodyが呼び出されます(たとえば、printステートメントを使用します)
  3. より深くデバッグを続けることはまだ結果ではありません(あなたにとって最も簡単な場合は、printステートメントが機能します)
于 2012-05-13T22:49:58.180 に答える