繁体   English   中英

在 Django 中,如何返回多对多连接的另一端?

[英]In django, how do I return the other end of a many to many join?

我有一个这样的表模式。

在此处输入图片说明

您是一个用户,您想获取其他用户的list (作为User模型)。 我有一个已知的users.id值。

此查询的 SQL 相对简单:加入users_B = entries_B.your_userentries_B.other_user = users_B.id其中entries_B.your_user = x

除非我对数据进行后期处理(使用prefetch_related计数作为后期处理)或生成一个非常奇怪的查询(涉及左连接和子查询的内容),否则我无法弄清楚如何在 django 中执行此操作。 有没有办法获取User的列表并使生成的 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=)

这将返回存在Entry_B对象的User ,其中your_user是给定的myuser对象。


注意:通常最好使用settings.AUTH_USER_MODEL [Django-doc]来引用用户模型,而不是直接使用User模型 [Django-doc] 有关更多信息,您可以查看文档引用User模型部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM