父模型具有多个外键时的Django外键反向访问[重复]
Posted
技术标签:
【中文标题】父模型具有多个外键时的Django外键反向访问[重复]【英文标题】:Django Foreignkey reverse access when parent model has multiple Foreignkeys [duplicate] 【发布时间】:2020-06-22 09:13:02 【问题描述】:我使用标准的 Django 用户模型并编写了这个自定义模型:
class Messages(models.Model):
sender = models.ForeignKey(User, related_name="sender", on_delete=models.CASCADE)
receiver = models.ForeignKey(User, related_name="receiver", on_delete=models.CASCADE)
content = models.TextField()
date = models.DateTimeField(default=timezone.now)
现在,给定一个用户对象user
,我想访问他发送或接收的所有消息。我试过:user.messages_set.all()
,但我收到以下错误:'User' object has no attribute 'messages_set'
。
我该如何解决这个问题?
感谢您的回答!
【问题讨论】:
这能回答你的问题吗? What is `related_name` used for in Django? @kyore 部分。有没有办法获取包含用户是发送者或接收者的所有对象的查询集?使用向后访问? 【参考方案1】:因为你定义了related_name='sender'
。如果使用相关名称,则必须将其用于向后查询。您可以使用此代码访问您的使用消息:
user.sender.all()
您可以使用有关related_name here的更多详细信息
【讨论】:
有没有办法获得一个包含所有对象的查询集,用户是发送者还是接收者?使用向后访问? 如果你想得到一个用户的消息,他可以是接收者或发送者,你可以使用这个查询:Messages.objects.filter(Q(sender=user)|Q(receiver=user) )以上是关于父模型具有多个外键时的Django外键反向访问[重复]的主要内容,如果未能解决你的问题,请参考以下文章
当模型具有外键时,ModelState.IsValid 为 false