Mysql
 sql >> база данни >  >> RDS >> Mysql

Django - Как да картографирате съобщения, изпратени между потребителите

Проблемът със свързаното_име е, че трябва да е низ, като така:

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)

това решава проблема ви с получаването на покани на потребителите, тъй като за това е свързано име. ако приемем, че имате потребител, инстанциран като този потребител, можете да получите всички покани, които той е изпратил, като направите:

invites = thisuser.invites_sent.all()

или всички покани, които е получил, като направи:

invites = thisuser.invites_received.all()

Може би има някаква цел, за която не знам, тъй като съм сравнително нов във всичко това, но не виждам смисъл в concert_id и artist_id поле, тъй като и двете са auto_field и винаги ще имат една и съща стойност, която също ще бъде същата стойност на id поле, което, както посочихте, django създава автоматично (когато нямате друго поле, зададено като първичен ключ за модела).

Това, което бих направил, е следното. Определете поканата като такава:

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)

тогава можете да създадете нови покани като това:

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

и получавайте потребителски покани по този начин:

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

Тъй като имате достъп до поканите чрез свързаното_име, което сте посочили в декларацията за външния ключ, многотоманиполета в потребителския модел нямат никаква цел.

Надявам се, че покрих почти всичко

(може да има правописни грешки, тъй като написах целия код тук)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INET_ATON() и INET_NTOA() в PHP?

  2. Как мога да се отърва от тези коментари в MySQL дъмп?

  3. получите по географска ширина и дължина в laravel 5 с други съединения

  4. Генерирайте произволна LocalDate с java.time

  5. MySQL рекурсивна CTE таблица не съществува