2010-11-18 12 views
0

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

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

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

私が見つけたpost_saveの例から、これはこれまで示されているものからである - ので、私は道オフと思いますマーク。

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

答えて

2

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

まず、最初のパラメータとしてselfがないため、これはメソッドではありません。

第2に、インスタンスを作成するのではなく、クラスを作成しているようです。クラス自体は保存することはできず、そのインスタンスだけを保存することはできません。

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

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

コメントフレームワークでは、一般的なpost_saveの代わりに使用できるits own signalsが定義されています。実際に必要なのは、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) 
+0

ええ、私はあなたが投稿したものを使用して、AssertionErrorを取得しました。シグナル受信者は呼び出し可能でなければなりません。この投稿は同じエラーを持っているようです:http://stackoverflow.com/questions/2310676/django-signal-via-decorator-on-model-method – Emile

+0

申し訳ありませんが、接続の呼び出しが間違った方法で行われました:編集されました。それは今です。 –

+0

ありがとう、それは今、エラーをスローしませんが、まだget_profile()。ポイントを更新していないようです。私はそれが呼び出されるかどうかは分かりません。その他の提案はありますか?助けてくれてありがとう。 – Emile

関連する問題