O problema com o related_name é que ele deve ser uma string, assim:
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)
isso resolve seu problema de conseguir os convites dos usuários, pois é para isso que serve um nome relacionado. supondo que você tenha um usuário instanciado como esse usuário, você pode obter todos os convites que ele enviou fazendo:
invites = thisuser.invites_sent.all()
ou todos os convites que recebeu fazendo:
invites = thisuser.invites_received.all()
Talvez haja um propósito que eu não conheça, já que sou bastante novo em tudo isso, mas não vejo o ponto no
concert_id
e o artist_id
field, já que ambos são auto_field's e sempre terão o mesmo valor, que também será o mesmo valor do id
campo que, como você apontou, o django cria automaticamente (quando você não tem outro campo definido como chave primária para o modelo). O que eu faria é o seguinte. Defina o convite como tal:
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)
então você pode criar novos convites como este:
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()
e receba convites de usuários como este:
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')
Como você pode acessar os convites por meio do nome_relacionado especificado na declaração de chave estrangeira, o campo manytomanyfield no modelo de usuário não serve para nada.
Espero ter coberto quase tudo
(pode haver erros de digitação, pois digitei todo o código aqui)