sql >> Databasteknik >  >> RDS >> Mysql

Django- Hur man kartlägger meddelanden som skickas mellan användare

Problemet med relaterat_namn är att det ska vara en sträng, som så:

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)

detta löser ditt problem med att få användarnas inbjudningar, eftersom det är vad ett relaterat namn är till för. förutsatt att du har en användare instansierad som denna användare kan du få alla inbjudningar han skickade genom att göra:

invites = thisuser.invites_sent.all()

eller alla inbjudningar han fick genom att göra:

invites = thisuser.invites_received.all()

Kanske finns det ett syfte som jag inte vet om, eftersom jag är ganska ny på allt detta, men jag ser inte poängen med concert_id och artist_id eftersom de båda är auto_fields och alltid kommer att ha samma värde, vilket också kommer att vara samma värde för id fält som, som du påpekade, django skapar automatiskt (när du inte har ett annat fält inställt som primärnyckel för modellen).

Det jag skulle göra är följande. Definiera inbjudan som sådan:

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)

då kan du skapa nya inbjudningar så här:

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

och få användarinbjudningar så här:

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

Eftersom du kan komma åt inbjudningarna via relaterat_namn som du angav i den främmande nyckeldeklarationen att manytomanyfield på användarmodellen inte tjänar något syfte.

Hoppas jag täckte det mesta

(det kan vara stavfel eftersom jag skrev in all kod här)



  1. MySql-frågeresultat alla timmar på dygnet

  2. Var kan man använda mysql_real_escape_string för att förhindra SQL-injektion?

  3. Hur man väljer flera rader från mysql med en fråga och använder dem i php

  4. MySQL beställ inlägg efter senaste kommentar ELLER senast postad