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フィールドを作成して、'self'それを呼び出すことができます。そして、応答があるたびに新しいオブジェクトを作成し、この応答が送信されたメッセージに FK フィールドを割り当てます。同じメッセージへの複数の応答を適切に処理する必要があります。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)

createdおよびタイムスタンプを追加してupdated、送信されたメッセージの順序を追跡することもできます。

related_nameまた、 FKが必要であることに注意してください。そうしないと、 Userdjango がエラーをスローします。

ここで、取得時に、その時点までの 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.

非常に単純なフォーマットなどを理解させます

于 2013-06-23T11:14:00.780 に答える