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

Django- Sådan kortlægger du beskeder sendt mellem brugere

Problemet med relateret_navn er, at det skal være en streng, som sådan:

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)

dette løser dit problem med at få brugernes invitationer, da det er hvad et relateret navn er til. forudsat at du har en bruger instantieret som denne bruger, kan du få alle de invitationer han sendte ved at gøre:

invites = thisuser.invites_sent.all()

eller alle de invitationer han modtog ved at gøre:

invites = thisuser.invites_received.all()

Måske er der et formål, som jeg ikke kender til, da jeg er ret ny i alt dette, men jeg kan ikke se meningen med concert_id og artist_id felt, da de begge er auto_field's og altid vil have den samme værdi, hvilket også vil være den samme værdi af id felt, som, som du påpegede, django automatisk opretter (når du ikke har et andet felt indstillet som den primære nøgle for modellen).

Det jeg ville gøre er følgende. Definer invitation 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)

så kan du oprette nye invitationer som denne:

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

og få brugerinvitationer som denne:

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 du er i stand til at få adgang til invitationerne gennem det relaterede_navn, du specificerede i den fremmede nøgleerklæring, at mangetomanyfield på brugermodellen ikke tjener noget formål.

Håber jeg dækkede det meste

(der kan være stavefejl, da jeg har indtastet al koden her)



  1. Hvad hvis en udløser fejler?

  2. MySQL datetime sammenligning med forrige række

  3. Import af 8GB mysql dump tager lang tid

  4. doktrin - få næste og forrige optegnelse