0

オブジェクトが保存された後、ユーザーに電子メールを送信しようとしています。しかし、送信する前に、許可されているかどうかを確認するためのユーザー プロファイルを取得できません。

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    ...
    notifications = models.BooleanField(default=True)
    ...

class Follow(models.Model):
    who = models.ForeignKey(User, related_name='he_follow')
    whom = models.ForeignKey(User, related_name='him_follow')

    ...

    def send_notification(sender, created, **kwargs):
        if created:
            obj = kwargs['instance']
            check_it = obj.whom.get_profile().notifications
            if check_it == True:
                #rest code for sending emails works
            else:
                pass

    post_save.connect(send_notification)

これはエラーを返す'LogEntry' object has no attribute 'whom' ので、post_saveに送信者がいないためだと思いました。しかし、post_save 行を ` に変更した後

    post_save.connect(send_notification, sender=Follow)

django がエラーでクラッシュしますNameError: name 'Follow' is not defined

4

2 に答える 2

2

本当の問題は、関数の配置です。フォロー モデルの下に配置します。モデルの外にある必要があります。

class Follow(models.Model):
    who = models.ForeignKey(User, related_name='he_follow')
    whom = models.ForeignKey(User, related_name='him_follow')

    ...

//align with Follow model don't put it inside

def send_notification(sender, created, **kwargs):
    if created:
        obj = kwargs['instance']
        check_it = obj.whom.get_profile().notifications
        if check_it == True:
            #rest code for sending emails works
        else:
            pass

post_save.connect(send_notification, sender=Follow)
于 2013-03-29T12:15:38.503 に答える
1

必要な/送信するパラメータを確認してくださいsend_notification

post_save シグナルで送信される引数 ( Django Docs の post_save ):

  • 送信者: モデル クラス。
  • instance : 保存される実際のインスタンス。
  • 作成済み: ブール値。新しいレコードが作成された場合は true。
  • raw: ブール値。モデルが提示されたとおりに保存される場合 (つまり、フィクスチャをロードする場合) は True です。データベースがまだ一貫した状態にない可能性があるため、データベース内の他のレコードを照会/変更しないでください。
  • using: 使用されているデータベース エイリアス。

メソッドは、ファイル内send_notificationで次のようになります。signals.py

from yourproject.yourapp.models import Follow

... 

def send_notification(sender, **kwargs):
    if kwargs['created']:
        check_it = kwargs['instance'].whom.get_profile().notifications
        if check_it == True:
            #rest code for sending emails works
        else:
            pass

post_save.connect(send_notification, sender=Follow)
于 2013-03-29T11:47:18.057 に答える