Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Django – So ordnen Sie Nachrichten zu, die zwischen Benutzern gesendet werden

Das Problem mit dem related_name ist, dass es ein String sein sollte, etwa so:

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)

Dies löst Ihr Problem mit dem Erhalten der Benutzereinladungen, da ein verwandter Name dafür gedacht ist. Angenommen, Sie haben einen Benutzer als diesen Benutzer instanziiert, können Sie alle Einladungen erhalten, die er gesendet hat, indem Sie Folgendes tun:

invites = thisuser.invites_sent.all()

oder alle Einladungen, die er erhalten hat, indem er:

invites = thisuser.invites_received.all()

Vielleicht gibt es einen Zweck, den ich nicht kenne, da ich ziemlich neu in all dem bin, aber ich sehe den Sinn in der concert_id nicht und die artist_id Feld, da sie beide auto_fields sind und immer den gleichen Wert haben werden, der auch der gleiche Wert der id sein wird Feld, das Django, wie Sie bereits sagten, automatisch erstellt (wenn Sie kein anderes Feld als Primärschlüssel für das Modell festgelegt haben).

Was ich tun würde ist folgendes. Einladung als solche definieren:

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)

dann könnten Sie neue Einladungen wie folgt erstellen:

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

und Benutzereinladungen wie folgt erhalten:

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

Da Sie über den von Ihnen in der Fremdschlüsseldeklaration angegebenen related_name auf die Einladungen zugreifen können, erfüllt Manytomanyfield im Benutzermodell keinen Zweck.

Hoffe, ich habe fast alles abgedeckt

(Da ich den gesamten Code hier eingegeben habe, könnten sich Tippfehler eingeschlichen haben)