【问题标题】:Creating a follow button? How to maximize efficiency?创建关注按钮?如何最大化效率?
【发布时间】:2011-07-12 21:15:02
【问题描述】:

我正在使用 django。我想创建一个关注按钮,点击后会将当前用户包含在关注者组中,然后显示关注者的数量。还有一个取消关注按钮,显然相反。

我的问题是如何以尽可能少的查询数量和尽可能高效的方式做到这一点。我将在用户和帖子之间建立多对多关系(紧随其后)。所以我猜一旦我点击关注/取消关注按钮,就会有一个查询将一个新对象插入到用户、user_to_post 和 post 表中。并且检索关注者的数量将在 user_to_post 表中使用 count 进行另一个查询。我对此不确定,但我假设这种方法总共需要 4 个查询(3 个插入/删除,1 个选择)。

有什么更好/更有效的方法?

谢谢!

【问题讨论】:

    标签: python sql django many-to-many relational-database


    【解决方案1】:

    恕我直言:

    并且检索关注者的数量将在 user_to_post 表中使用 count 进行另一个查询。

    1. 如果你插入的东西比你拥有的东西多,你不需要检索任何东西。获取这些数据并使用它们......甚至将它们路径到你的其他函数,比如不必要的变量等等...... 例如您可以在页面中拥有 user_to_post 的数量。所以它出现在您的请求中。 (如果你渲染它们)你可以通过表单路径这个变量,并根据你增加或减少的内容使 var_count+1 或 -1

    2. 为什么您需要进行 3 次查询才能发布内容?请显示您的(查看或查询的位置)代码...您可以编写 it_to 进行一次查询以将数据写入 3 个模型...如果您有影响主模型的字段。例如您有具有相关模型的外键/多对多字段,您可以进行 1 次查询,然后通过构造 select_related() 访问它的数据。请参阅:select related Django API referenceMaking queries

    请随意对您的代码提出更具体的问题...

    【讨论】:

    • 1.如果我向看到帖子的任何人显示总关注者的数量怎么办?那么变量将不再只存在于页面上,因此需要在服务器上进行某种存储。
    • 2.查询本身可能是 django 代码中的一个,但代码随后会在 sql 中执行多个查询。例如docs.djangoproject.com/en/dev/topics/db/queries/… 会为你做连接,但做一个连接有时相当于做两个查询(取决于情况)所以我想限制我做的连接/查询的数量
    • 1.您会将数据“发布”到您的视图中吗?简单地使用 jQuery 或 JavaScript 来更改页面上的数字,您在 django 中的 VIEW 将更改服务器端的代码。所以你会将数据存储到你的模型中,但不会再次从中检索它们......代码会告诉更多:)
    • 2.关于查询本身。这不是你在 Django 中关心的问题。这里的要点是,如果您在 django 中进行 1 次查询并且在 SQL 中失去了生产力,那么它就不是适合您需要的 SQL 服务器...尝试阅读有关 SQL 服务器速度比较的信息。也许你用精确的查询解决了一些具体的问题?例如。如果你现在正在使用 MySQL 并且将来会切换到 Postgre 甚至是 GAE...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2022-11-11
    • 2012-01-10
    • 2016-03-04
    • 2012-12-09
    • 2010-12-23
    • 2012-12-16
    相关资源
    最近更新 更多