sql >> Databáze >  >> RDS >> Mysql

Django- Jak mapovat zprávy zasílané mezi uživateli

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)



  1. Zadaný klíč byl příliš dlouhý; maximální délka klíče je 1000 bajtů

  2. PHP mysqli_real_escape_string vrací prázdný řetězec

  3. Jak získat hodnoty, které neobsahují čísla v MariaDB

  4. Používáte správné nástroje pro sledování výkonu databáze?