0

Djangoコメントフレームワークを使用して、コメントを送信した後、ユーザーのプロファイルにポイントを追加しようとしています。post_save を使用する必要があると思いますが、完全に正直かどうかはわかりません。

これが私のmodels.pyのメソッドとして持っているものです:

 def add_points(request, Comment):
    if Comment.post_save():
        request.user.get_profile().points += 2
        request.user.get_profile().save()

私が見つけたpost_saveの例から、これは示されているものとはかけ離れています.

ご協力ありがとうございました。

4

1 に答える 1

2

残念ながら、これはまったく意味がありません。

selfまず、最初のパラメーターとして持っていないため、これをメソッドにすることはできません。

次に、インスタンスではなくクラスを取得しているようです。クラス自体を保存することはできず、そのインスタンスのみを保存できます。

第三にpost_save、モデルのメソッドではありません (自分で定義した場合を除く)。これはシグナルであり、シグナルを呼び出すのではなく、シグナル ハンドラーをアタッチし、そこでロジックを実行します。シグナルからメソッドにデータを返すこともできません。

最後に、2 を追加したプロファイル インスタンスは、2 行目に保存したプロファイル インスタンスと必ずしも同じではありません。これは、Django モデル インスタンスに ID がないためです。一度取得して変数に入れ、それを保存します。

コメント フレームワークは、汎用の post_save の代わりに使用できる独自のシグナルを定義します。したがって、実際に必要なのは、comment_was_posted にシグナル ハンドラーを登録することです。そのハンドラー内で、ユーザーのプロファイルを取得して更新する必要があります。

def comment_handler(sender, comment, request, **kwargs):
    profile = request.user.get_profile()
    profile.points += 2
    profile.save()

from django.contrib.comments.signals import comment_was_posted
comment_was_posted.connect(comment_handler, sender=Comment)
于 2010-11-18T13:19:02.503 に答える