sql >> Database >  >> RDS >> Mysql

Django- Hoe berichten die tussen gebruikers worden verzonden in kaart te brengen?

Het probleem met de related_name is dat het een string zou moeten zijn, zoals:

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)

dit lost uw probleem op met het ontvangen van gebruikersuitnodigingen, want daar is een verwante naam voor. ervan uitgaande dat je een gebruiker hebt die als deze gebruiker is geïnstantieerd, kun je alle uitnodigingen krijgen die hij heeft verzonden door het volgende te doen:

invites = thisuser.invites_sent.all()

of alle uitnodigingen die hij ontving door te doen:

invites = thisuser.invites_received.all()

Misschien is er een doel waar ik niets vanaf weet, aangezien ik hier vrij nieuw in ben, maar ik zie het punt niet in van de concert_id en de artist_id veld, aangezien ze beide van auto_field zijn en altijd dezelfde waarde zullen hebben, wat ook dezelfde waarde zal zijn van de id veld dat, zoals je aangaf, django automatisch aanmaakt (als je geen ander veld hebt ingesteld als de primaire sleutel voor het model).

Wat ik zou doen is het volgende. Definieer uitnodiging als zodanig:

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)

dan zou je als volgt nieuwe uitnodigingen kunnen maken:

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

en ontvang gebruikersuitnodigingen als volgt:

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

Aangezien je toegang hebt tot de uitnodigingen via de related_name die je hebt opgegeven in de declaratie van de refererende sleutel, heeft dat veelveld in het gebruikersmodel geen zin.

Ik hoop dat ik bijna alles heb gedekt

(er kunnen typefouten zijn omdat ik hier alle code heb getypt)



  1. Howto:een mysql InnoDB-opslagengine reinigen?

  2. Tijdstempel opslaan in mysql-tabel met php

  3. Een waarschuwing uitschakelen in sqlalchemy

  4. Awesome 24 Concurrent Manager Sollicitatievragen