Python 为什么在django模型中不能对同一模型使用两个单独的外键

Python 为什么在django模型中不能对同一模型使用两个单独的外键,python,django,foreign-keys,chat,Python,Django,Foreign Keys,Chat,我有一个理论模型不起作用: class Message(models.Model): text = models.TextField() created = models.DateTimeField(auto_now_add=True) sender = models.ForeignKey(User) receiver = models.ForeignKey(User) 现在,如果一个用户给某人发了消息,比如私人消息线程,你有人发送了消息

我有一个理论模型不起作用:

class Message(models.Model):
       text = models.TextField()
       created = models.DateTimeField(auto_now_add=True)
       sender = models.ForeignKey(User)
       receiver = models.ForeignKey(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
?这是在用户之间实现消息的糟糕方式吗?我的错误是什么?谢谢,


Cody

如错误消息所示,将参数添加到外键定义中:

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')
这些相关名称可用于以下情况:

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)

先生,我以后在哪里使用这个相关的名字?我正在
url(r'^message/(?P\w+)中将“接收者”保存为“用户名”/$',views.message
,我将发件人保留在通常的request.user字段中此相关名称用于反向关联:如果不想创建反向关联,则可以将
相关名称设置为
'+'
。我使用指向
相关名称
文档的链接更新了答案非常感谢你,卡塔瓦兰先生,很好的例子