父模型具有多个外键时的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外键反向访问[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django - 删除外键时删除数据库条目

Django Rest DRF:从反向关系访问外键引用

当模型具有外键时,ModelState.IsValid 为 false

Django 和具有多个外键的模型

Django模型:如何避免在使用来自同一个表的2个外键时引用相同的记录

如何以最少的数据库点击次数将多个实例添加到 Django 反向外键集?