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)