【问题标题】:How can I select records n-at-a-time for multiple users to edit?如何一次选择 n 条记录供多个用户编辑?
【发布时间】:2017-09-22 20:20:28
【问题描述】:

我正在使用带有 postgresqlDjango 后端。

假设我有一个数据库,其中包含一个名为 Employees 的表,其中包含大约 20,000 条记录。

我需要允许多个用户为Employees 中的每条记录编辑和验证Area Code 字段。

我希望允许用户一次查看 30 条记录(以减少倦怠)。

如何从Employees一次选择30条记录发送到前端UI进行编辑,不让多个用户编辑相同的记录,或者重新选择已经验证的记录?

我不需要数据库内容的 cmets(这些是示例表和字段名称)。

【问题讨论】:

    标签: django performance postgresql psycopg2


    【解决方案1】:

    一种方法是在您的表中再添加 2 个字段,例如 assigned_toverified。当您允许用户查看该员工时,您可以更新assigned_to,它可以是验证用户的外键。这将创建一条记录,防止员工被选中两次。 assigned_to 也可以兼作谁验证了此员工的记录,以供将来参考。

    verified 可能只是一个布尔字段,用于跟踪员工是否已经过验证,并且可以在用户确认验证时更新

    实际的选择可以这样完成:

    employees = Employee.objects.filter(assigned_to=None, verified=False)[:30]
    

    然后

    for emp in employees:
            emp.assigned_to = user
            emp.save()
    

    注意:如果 2 个用户同时提出此请求,这仍然可能导致竞争条件。为避免这种情况,另一种可能是将员工表分区为每个用户的组,而不会重叠。这将确保不会有 2 个用户拥有相同的员工

    【讨论】:

    • 这会自动更新数据库吗?如果是这样,我认为这将有很大帮助
    • 你到底是什么意思?当您在视图中执行操作时,数据库会更新
    • 我读过有关获取数据库“快照”并根据该快照而不是当前版本进行操作的查询,但我很困惑。你说的很好用,谢谢。实施后我会将其标记为已解决。
    猜你喜欢
    • 2021-10-01
    • 2011-02-22
    • 2020-06-21
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多