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は目的を果たしません。
私がほとんどすべてをカバーしたことを願っています
(ここにすべてのコードを入力したため、タイプミスがある可能性があります)