Mysql
 sql >> Database >  >> RDS >> Mysql

Django- Come mappare i messaggi inviati tra utenti

Il problema con il related_name è che dovrebbe essere una stringa, in questo modo:

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)

questo risolve il tuo problema con l'ottenimento degli inviti degli utenti, poiché è a questo che serve un nome correlato. supponendo che tu abbia un utente istanziato come questo utente puoi ottenere tutti gli inviti che ha inviato facendo:

invites = thisuser.invites_sent.all()

o tutti gli inviti che ha ricevuto facendo:

invites = thisuser.invites_received.all()

Forse c'è uno scopo che non conosco, dato che sono abbastanza nuovo in tutto questo, ma non vedo il punto nel concert_id e artist_id campo, dal momento che sono entrambi auto_field e avranno sempre lo stesso valore, che sarà anche lo stesso valore di id campo che, come hai sottolineato, django crea automaticamente (quando non hai un altro campo impostato come chiave primaria per il modello).

Quello che farei è il seguente. Definisci l'invito come tale:

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)

quindi potresti creare nuovi inviti come questo:

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 ricevi inviti di utenti come questo:

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')

Dal momento che puoi accedere agli inviti tramite il related_name che hai specificato nella dichiarazione di chiave esterna, il campo manytomany sul modello utente non serve a nulla.

Spero di aver coperto quasi tutto

(potrebbero esserci errori di battitura poiché ho digitato tutto il codice qui)