Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Django- Bagaimana memetakan pesan yang dikirim antar pengguna

Masalah dengan nama_terkait adalah bahwa itu harus berupa string, seperti:

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)

ini memecahkan masalah Anda dengan mendapatkan undangan pengguna, karena itulah gunanya nama terkait. dengan asumsi Anda memiliki pengguna yang dipakai sebagai pengguna ini, Anda bisa mendapatkan semua undangan yang dia kirim dengan melakukan:

invites = thisuser.invites_sent.all()

atau semua undangan yang dia terima dengan melakukan:

invites = thisuser.invites_received.all()

Mungkin ada tujuan yang tidak saya ketahui, karena saya cukup baru dalam semua ini, tetapi saya tidak melihat intinya dalam concert_id dan artist_id field, karena keduanya adalah auto_field dan akan selalu memiliki nilai yang sama, yang juga akan menjadi nilai id yang sama bidang yang, seperti yang Anda tunjukkan, django buat secara otomatis (bila Anda tidak memiliki bidang lain yang ditetapkan sebagai kunci utama untuk model).

Apa yang akan saya lakukan adalah sebagai berikut. Definisikan undangan seperti ini:

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)

maka Anda dapat membuat undangan baru seperti ini:

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

dan dapatkan undangan pengguna seperti ini:

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

Karena Anda dapat mengakses undangan melalui nama_terkait yang Anda tentukan dalam deklarasi kunci asing bahwa bidang banyaktoman pada model pengguna tidak berguna.

Semoga saya membahas hampir semuanya

(mungkin ada kesalahan ketik karena saya mengetik semua kode di sini)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui pernyataan di MySQL menggunakan C #

  2. Hibernate - ManyToOne &Inheritance / BERGABUNG / dipetakan Oleh

  3. Bergabunglah dengan beberapa tabel dengan nama kolom yang sama

  4. MySQL WHERE IN Query - ORDER BY Match

  5. Mengapa sesi panggilan tidak berfungsi? (penyala kode 3)