sql >> Base de Datos >  >> RDS >> Mysql

Django- Cómo mapear mensajes enviados entre usuarios

El problema con el nombre_relacionado es que debería ser una cadena, así:

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)

esto resuelve su problema con la obtención de las invitaciones de los usuarios, ya que para eso sirve un nombre relacionado. suponiendo que tiene un usuario instanciado como este usuario, puede obtener todas las invitaciones que envió haciendo:

invites = thisuser.invites_sent.all()

o todas las invitaciones que recibió haciendo:

invites = thisuser.invites_received.all()

Tal vez haya un propósito que desconozco, ya que soy bastante nuevo en todo esto, pero no veo el punto en el concert_id y el artist_id campo, ya que ambos son de auto_field y siempre tendrán el mismo valor, que también será el mismo valor del id campo que, como señaló, Django crea automáticamente (cuando no tiene otro campo establecido como clave principal para el modelo).

Yo lo que haría es lo siguiente. Defina invitación 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)

entonces podrías crear nuevas invitaciones como esta:

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

y obtenga invitaciones de usuarios como esta:

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

Dado que puede acceder a las invitaciones a través del nombre relacionado que especificó en la declaración de clave externa, el campo muchos a muchos en el modelo de usuario no sirve para nada.

Espero haber cubierto casi todo

(puede haber errores tipográficos ya que escribí todo el código aquí)