Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Django- Jak mapować wiadomości wysyłane między użytkownikami

Problem z powiązanym_name polega na tym, że powinien to być ciąg, jak na przykład:

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)

rozwiązuje to problem z otrzymywaniem zaproszeń użytkowników, ponieważ do tego służy powiązana nazwa. zakładając, że masz instancję użytkownika jako ten użytkownik, możesz otrzymać wszystkie zaproszenia, które wysłał, wykonując:

invites = thisuser.invites_sent.all()

lub wszystkie zaproszenia, które otrzymał, wykonując:

invites = thisuser.invites_received.all()

Może jest jakiś cel, o którym nie wiem, ponieważ jestem całkiem nowy w tym wszystkim, ale nie widzę sensu w concert_id i artist_id pole, ponieważ oba są polami auto_field i zawsze będą miały tę samą wartość, która będzie również tą samą wartością id pole, które, jak wspomniałeś, django tworzy automatycznie (gdy nie masz innego pola ustawionego jako klucz podstawowy dla modelu).

To, co bym zrobił, jest następujące. Zdefiniuj zaproszenie jako takie:

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)

wtedy możesz utworzyć nowe zaproszenia w ten sposób:

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

i otrzymuj zaproszenia użytkowników w ten sposób:

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

Ponieważ możesz uzyskać dostęp do zaproszeń za pośrednictwem powiązanej_nazwy określonej w deklaracji klucza obcego, wieletomanypole w modelu użytkownika nie ma żadnego sensu.

Mam nadzieję, że omówiłem prawie wszystko

(mogą być literówki, ponieważ wpisałem tutaj cały kod)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zarządzanie transakcjami z DAO

  2. Zmiana katalogu danych w pliku my.ini nie jest przestrzegana w WAMP

  3. konwertuj dane xml na zapytanie wstaw/aktualizuj mysql za pomocą php

  4. Jakiego rodzaju relacji wymagają te 2 tabele?

  5. Konfiguracja ODBC MySQL