Vấn đề với tên liên quan là nó phải là một chuỗi, như sau:
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)
điều này giải quyết vấn đề của bạn với việc nhận được lời mời của người dùng, vì đó là tên có liên quan. giả sử bạn có một người dùng được khởi tạo với tư cách là người dùng này, bạn có thể nhận được tất cả các lời mời mà anh ta đã gửi bằng cách thực hiện:
invites = thisuser.invites_sent.all()
hoặc những lời mời mà anh ấy nhận được bằng cách thực hiện:
invites = thisuser.invites_received.all()
Có thể có một mục đích nào đó mà tôi không biết, vì tôi còn khá mới đối với tất cả những điều này, nhưng tôi không thấy điểm mấu chốt trong concert_id
và artist_id
, vì chúng đều là auto_field và sẽ luôn có cùng giá trị, giá trị này cũng sẽ là giá trị giống nhau của id
trường mà như bạn đã chỉ ra, django tự động tạo (khi bạn không đặt trường khác làm khóa chính cho mô hình).
Những gì tôi muốn làm là sau đây. Xác định lời mời như sau:
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)
thì bạn có thể tạo các lời mời mới như sau:
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()
và nhận được những lời mời của người dùng như thế này:
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')
Vì bạn có thể truy cập các lời mời thông qua Related_name mà bạn đã chỉ định trong khai báo khóa ngoại nên nhiềutomanyfield trên mô hình người dùng không phục vụ mục đích nào.
Hy vọng tôi đã bao gồm hầu hết mọi thứ
(có thể có lỗi chính tả vì tôi đã nhập tất cả mã ở đây)