2010-11-19 10 views
5

次回ログイン時に表示できるユーザに対して「通知」を残すシステムを追加しています。models.pyファイルに簡単な通知クラスを作成しました。私はこれで終わるコンソールでそれをしようとするとDjangoでユーザ通知システムを作成する

class UserInfo(models.Model): 
    user = models.OneToOneField(User, unique=True) 
    ... 
    reputation = models.IntegerField(null=True, blank=True) 

    def add_notification(message): 
     notification = Notification(user=self.user, message=message) 
     notification.save 

:私はsocialauthの一環として、Djangoの既存のユーザーのシステムにはいくつかの属性に追加する(同じmodels.pyに)こののUserInfoクラスを持っている

>>> user = User.objects.get(id=14) 
>>> user.userinfo.add_notification('you are an awesome intern!') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: add_notification() takes exactly 1 argument (2 given) 
>>> 

私はここで何が欠けていますか?私はDjango noobのようなものなので、簡単なことかもしれません。ありがとう!

答えて

7

使用Djangoのメッセージ

まずオフを、ご検討くださいdcrodjer's answer。 Djangoのメッセージシステムはまさにあなたが必要とするものであり、なぜあなたのコードツリーにあなたが無料で入手できるものを置くのですか?とにかく

(あなただけの実験とDjangoについての詳細を学ぶためにこれをやっている場合はもちろん、続けてください!)


、修正

概要:この問題を解決するには、単に変更これadd_notifications:メソッドシグネチャに追加の引数(名前self

def add_notification(self, message): 
     notification = Notification(user=self.user, message=message) 
     notification.save 

注意。


Pythonでメソッドを呼び出すことで癖のビットがあります

を働いていないのはなぜ。

class Foo(object): 
    def bar(self): 
     print 'Calling bar' 

    def baz(self, shrubbery): 
     print 'Calling baz' 

thisguy = Foo() 

あなたがメソッドを呼び出すbar

は、あなたが thisguy.bar()のような行を使用することができます。 Pythonは、オブジェクト上のメソッドを呼び出すと見ています( thisguyというオブジェクト上の barというメソッド)。これが起こると、Pythonはメソッドの最初の引数をオブジェクト自体( thisguyオブジェクト)で埋めます。

メソッドが機能しないのは、引数が1つしかないメソッドに対してuserinfo.add_notification('you are an awesome intern!')メソッドを呼び出すためです。まあ、Pythonは既にという名前の最初の引数(message)を、userinfoオブジェクトで埋めています。したがって、Pythonは、2つの引数を1つだけのメソッドに渡していると不平を言います。

7

Djangoのメッセージフレームワークの使用:あなたはできるだけ早く、彼はこの使用してログインすると、キュー内のuserinfo保存されたメッセージを出してもよいhttp://docs.djangoproject.com/en/dev/ref/contrib/messages/
を:

messages.add_message(request, messages.INFO, 'Hello world.') 
+2

私は、通知がスタックオーバーフローのようなajax呼び出しによってユーザーによって閉じられるまで、通知システムを維持することを望んでいます。メッセージはこれを行うことができると思いますか? – gohnjanotis

+0

ええええええと、私はメッセージがかなり素敵な機能だと思います...私もあまりにもそれを使用する...あなたは[この答え]を検討する必要があります(http://stackoverflow.com/questions/4229044/create-user-notification-system -in-django/4229263#4229263)。 – crodjer

2

add_notificationは、クラスのメソッドです。つまり、暗黙のうちにクラスのインスタンスが最初のパラメータとして渡されます。Classes in Python

代わりにこれを試してください:あなたは永続的なメッセージングを探しているなら

class UserInfo(models.Model): 
    ... 
    def add_notification(self, message): 
     ... 
1

あなたはおそらくあなたの質問を更新する必要があります。たぶんhttps://github.com/philomat/django-persistent-messagesは、コーディング時間を節約するのに役立つでしょうか?

+0

永続メッセージはライブ通知を意味しますか。それが作成された後、通知はユーザーの画面にポップアップ表示されますか? –

関連する問題