Mysql
 sql >> Base de données >  >> RDS >> Mysql

Django- Comment mapper les messages envoyés entre les utilisateurs

Le problème avec le related_name est qu'il devrait être une chaîne, comme ceci :

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)

cela résout votre problème avec l'obtention des invitations des utilisateurs, car c'est à cela que sert un nom associé. en supposant que vous ayez un utilisateur instancié en tant que cet utilisateur, vous pouvez obtenir toutes les invitations qu'il a envoyées en faisant :

invites = thisuser.invites_sent.all()

ou toutes les invitations qu'il a reçues en faisant :

invites = thisuser.invites_received.all()

Peut-être y a-t-il un but que je ne connais pas, puisque je suis assez nouveau dans tout cela, mais je ne vois pas l'intérêt du concert_id et le artist_id field, car ils sont tous les deux auto_field et auront toujours la même valeur, qui sera également la même valeur de l'id champ que, comme vous l'avez souligné, django crée automatiquement (lorsque vous n'avez pas d'autre champ défini comme clé primaire pour le modèle).

Ce que je ferais est le suivant. Définissez l'invitation comme telle :

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)

alors vous pouvez créer de nouvelles invitations comme ceci :

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

et obtenez des invitations d'utilisateurs comme ceci :

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

Étant donné que vous pouvez accéder aux invitations via le related_name que vous avez spécifié dans la déclaration de clé étrangère, plusieurs champs sur le modèle utilisateur ne servent à rien.

J'espère que j'ai presque tout couvert

(il peut y avoir des fautes de frappe puisque j'ai tapé tout le code ici)