python - 在 django 中,如何返回多对多连接的另一端?
问题描述
我有一个像这样的表模式。
你是一个用户,你想得到list
你其他用户的(作为User
模型)。我有一个已知的users.id
价值。
此查询的 SQL 相对简单: joinusers_B = entries_B.your_user
和entries_B.other_user = users_B.id
where entries_B.your_user = x
。
我无法弄清楚如何在 django 中执行此操作,除非我对数据进行后处理(使用prefetch_related
计数作为后处理)或生成一个非常奇怪的查询(涉及左连接和子查询的事情)。有没有办法获取User
s 列表并使生成的 SQL 简单明了?
这是入门模型:
class Entry_B(models.Model):
your_user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="entries"
)
other_user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="other_user_entries"
)
order = models.IntegerField()
expiration_date = models.DateTimeField()
该User
模型不包含与这些关系相关的任何字段。
解决方案
您可以.filter(…)
[Django-doc]使用:
User.objects.filter(other_user_entries__your_user=myuser)
这将返回存在给定对象的对象的User
s 。Entry_B
your_user
myuser
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用户模型比直接使用User
模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用User
模型部分。
推荐阅读
- netlogo - Netlogo : 使用 Levelspace 将值从子模型导入父模型
- c# - 卸载视图时调用 LoadedCommand
- elasticsearch - ElasticSearch 连接设置
- python - 简单的 Python 类不显示/打印任何东西
- angular8 - 我们如何应用点击 ag-grid 中的图标(角度 8)?
- git - 天蓝色 devops 存储库 URL
- tfs - 使用 VssConnection 和用户名/密码连接到 Azure DevOps 和 TFS
- php - MySQL添加时间到时间戳
- node.js - 电子禁用 CTRL+A 键盘快捷键
- javascript - 映射样式的 JSX 输入元素的行为不符合预期