sql >> データベース >  >> RDS >> Mysql

Django-ユーザー間で送信されるメッセージをマッピングする方法

    related_nameの問題は、次のように文字列である必要があることです。

    sender_id = models.ForeignKey(User, related_name= 'invites_sent', on_delete = models.CASCADE )
    recipient_id = models.ForeignKey(User, related_name= 'invites_received', on_delete = models.CASCADE)
    

    これにより、関連する名前の目的であるため、ユーザーの招待を取得する際の問題が解決されます。このユーザーとしてインスタンス化されたユーザーがいるとすると、次のようにして、彼が送信したすべての招待状を受け取ることができます。

    invites = thisuser.invites_sent.all()
    

    または、次のようにして受け取った招待状:

    invites = thisuser.invites_received.all()
    

    たぶん、私はこれらすべてにかなり慣れていないので、私が知らない目的があるかもしれませんが、concert_idにその要点がわかりません。 およびartist_id これらは両方ともauto_fieldであり、常に同じ値を持ち、これもidの同じ値になるためです。 ご指摘のとおり、djangoが自動的に作成するフィールド(モデルの主キーとして別のフィールドが設定されていない場合)。

    私がすることは次のとおりです。招待をそのように定義します:

    class Invite(models.Model):
        sender = models.ForeignKey(User, related_name= 'invites_sent', on_delete = models.CASCADE )
        recipient = models.ForeignKey(User, related_name= 'invites_received', on_delete = models.CASCADE)
        message = models.CharField(max_length = 120, blank = True, null = True)
        date_sent = models.DateTimeField(auto_now_add = True, auto_now = False)
    

    次に、次のような新しい招待状を作成できます:

    from appname.models import User, Invite
    
    inviter = User.objects.get(id=57) #enter whatever id is the inviter's id
    invitee = User.objects.get(id=42) #enter id of person that is being invited
    new_invite = Invite(sender=inviter, recipient=invitee, message='Hello, you are invited')
    new_invite.save()
    

    次のようにユーザーを招待します:

    from appname.models import User, Invite
    
    thisuser = User.objects.get(id=42)
    invites_sent_by_user = thisuser.invites_sent.all()
    invites_received_by_user = thisuser.invites_received.all()
    invites_received_after_march_seventh= thisuser.invites_received.filter(date_sent__gt='2015-03-07')
    

    外部キー宣言で指定したrelated_nameを介して招待にアクセスできるため、ユーザーモデルのmanytomanyfieldは目的を果たしません。

    私がほとんどすべてをカバーしたことを願っています

    (ここにすべてのコードを入力したため、タイプミスがある可能性があります)



    1. フィジカルスタンバイのORA-01264

    2. レコードの深さを取得し、親レコードと祖先レコードをカウントするmysql

    3. MySQLでは、数字を引用する必要がありますか?

    4. WindowsPhone8.1アプリはデータベースに接続します