为什么不能在 Django 模型中对同一模型使用 2 个单独的外键
Why cannot use 2 separate foreign keys for same model in django model
我有一个不起作用的理论模型:
class Message(models.Model):
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(User)
receiver = models.ForeignKey(User)
现在,如果用户向某人发送消息,例如私人消息线程,您有发送消息的人和接收消息的人,了解这一点很重要。我认为这两者都应该是一对多的,因为每个用户都可以发送无限条消息。发送者和接收者都是用户,来自同一个模型User,但他们必须是不同的人。我让 django 抱怨
django.core.management.base.CommandError: System check identified some issues:
ERRORS:
chat.Message.receiver: (fields.E304) Reverse accessor for 'Message.receiver' clashes with reverse accessor for 'Message.sender'.
HINT: Add or change a related_name argument to the definition for 'Message.receiver' or 'Message.sender'.
chat.Message.sender: (fields.E304) Reverse accessor for 'Message.sender' clashes with reverse accessor for 'Message.receiver'.
HINT: Add or change a related_name argument to the definition for 'Message.sender' or 'Message.receiver'.
我应该添加 unique=True
因为你不能给自己发消息吗?这是在用户之间实现消息的糟糕方式吗?我的错误是什么?谢谢,
科迪
如错误消息所述,将 related_name
参数添加到外键定义中:
class Message(models.Model):
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(User, related_name='messages_sent')
receiver = models.ForeignKey(User, related_name='messages_received')
这些相关的名称可以在 backward relations 中使用,如下所示:
user = User.objects.get(username='johndoe')
messages_from = user.messages_sent.all()
messages_to = user.messages_received.all()
相当于:
user = User.objects.get(username='johndoe')
messages_from = Messages.objects.filter(sender=user)
messages_to = Messages.objects.filter(receiver=user)
我有一个不起作用的理论模型:
class Message(models.Model):
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(User)
receiver = models.ForeignKey(User)
现在,如果用户向某人发送消息,例如私人消息线程,您有发送消息的人和接收消息的人,了解这一点很重要。我认为这两者都应该是一对多的,因为每个用户都可以发送无限条消息。发送者和接收者都是用户,来自同一个模型User,但他们必须是不同的人。我让 django 抱怨
django.core.management.base.CommandError: System check identified some issues:
ERRORS:
chat.Message.receiver: (fields.E304) Reverse accessor for 'Message.receiver' clashes with reverse accessor for 'Message.sender'.
HINT: Add or change a related_name argument to the definition for 'Message.receiver' or 'Message.sender'.
chat.Message.sender: (fields.E304) Reverse accessor for 'Message.sender' clashes with reverse accessor for 'Message.receiver'.
HINT: Add or change a related_name argument to the definition for 'Message.sender' or 'Message.receiver'.
我应该添加 unique=True
因为你不能给自己发消息吗?这是在用户之间实现消息的糟糕方式吗?我的错误是什么?谢谢,
科迪
如错误消息所述,将 related_name
参数添加到外键定义中:
class Message(models.Model):
text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(User, related_name='messages_sent')
receiver = models.ForeignKey(User, related_name='messages_received')
这些相关的名称可以在 backward relations 中使用,如下所示:
user = User.objects.get(username='johndoe')
messages_from = user.messages_sent.all()
messages_to = user.messages_received.all()
相当于:
user = User.objects.get(username='johndoe')
messages_from = Messages.objects.filter(sender=user)
messages_to = Messages.objects.filter(receiver=user)