Problém s related_name je, že by to měl být řetězec, například takto:
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)
to vyřeší váš problém se získáváním pozvánek uživatelů, protože k tomu slouží související název. za předpokladu, že máte jako tento uživatel vytvořenou instanci uživatele, můžete získat všechny pozvánky, které odeslal takto:
invites = thisuser.invites_sent.all()
nebo všechny pozvánky, které obdržel:
invites = thisuser.invites_received.all()
Možná to má nějaký účel, o kterém nevím, protože jsem v tom všem docela nový, ale nevidím smysl v concert_id
a artist_id
pole, protože oba jsou auto_field a budou mít vždy stejnou hodnotu, což bude také stejná hodnota id
pole, které, jak jste zdůraznil, django automaticky vytvoří (pokud nemáte jiné pole nastavené jako primární klíč pro model).
Co bych udělal, je následující. Definujte pozvánku jako takovou:
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)
pak můžete vytvořit nové pozvánky takto:
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()
a získejte pozvánky uživatelů takto:
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')
Vzhledem k tomu, že k pozvánkám můžete přistupovat prostřednictvím souvisejícího_jména, které jste uvedli v deklaraci cizího klíče, mnohotomy polí v uživatelském modelu neplní žádný účel.
Doufám, že jsem pokryl většinu všeho
(může dojít k překlepům, protože jsem sem zadal veškerý kód)