【发布时间】:2018-07-05 08:49:38
【问题描述】:
我决心尝试让所有其他用户回复与给定回复相同的评论。我想出了以下 python,但我担心这会做不止一个 DB 调用。
other_repliers = [other_reply.user for other_reply in my_reply.comment.replies.filter()]
我正在寻找一个单分贝调用修复程序。 Psuedo-SQL 逻辑类似于:
SELECT u.*
FROM users AS u
INNER JOIN replies AS r
ON r.user = user.id
WHERE r.comment = {my_reply.comment}
AND r.user != {my_reply.user}
有人知道我可以在 python django 命令链中执行上述 SQL 的方法吗?
编辑: 当你忽略任何不是关系的东西时,我的模型看起来像这样:
class Comment(models.Model):
user = models.ForeignKey(User, related_name='comments')
listing = models.ForeignKey(Listing, related_name='comments')
class CommentReply(models.Model):
user = models.ForeignKey(User, related_name='replies')
comment = models.ForeignKey(Comment, related_name='replies')
class User(models.Model):
pass
编辑:我希望在下图中收集最后一列:
/--- r4 --- u4
/
r1 --- c1 --- r3 --- u3
\
\--- r2 --- u2
*
** r1
其中 r* 是请求,c* 是 cmets,u* 是用户 星号线表示 r1 被忽略(因为它用于查找其他 r*s)。
【问题讨论】:
-
你能提供你的模型定义吗?
-
我已经剥离(我假设的)不相关的字段。如果您认为我遗漏了解决此问题的关键内容,请说出来。
-
print(my_reply.comment.replies.filter().query)查看 django 是如何编写查询的。 Django Debug Toolbar 还可以让您分析所有发出的 sql。 -
嘿@cowbert 这真的很酷(一直想知道如何访问 SQL 查询),但这只能告诉我我能做什么。不是我打算做的?我在这里错过了什么吗?
-
它会告诉你 django 正在生成什么,这将帮助你弄清楚你需要在模型中改变什么来优化它。
标签: python django python-3.x django-models django-queryset