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)