Skip to main content
 首页 » 编程设计

javascript之Django:防止创建重复对象的策略

2024年08月29日36emanlee

我遇到了创建多个数据库对象的问题,而我只希望创建一个。

我的应用程序模型包含一个 Form 和一个 Fields 集合,以及一个 FormEntry 和一个 FieldEntries。对于给定的 FormEntry,我只希望每个字段有一个 FieldEntry。

这是我的问题:我的 UI 使用 ajax 提交字段条目。处理提交的 Django 代码执行 FieldEntry.objects.get_or_create() 来创建一个条目,但我似乎遇到了某种竞争条件:如果两个 ajax 调用快速连续触发(它们触发为一旦字段失去焦点),似乎第二个 get_or_create() 可以在第一个完成之前发生,从而创建两个对象。我已经添加了比赛后清理的代码,但如果该字段没有再次更新,代码将不会运行。公平地说,我什至不确定这是否是导致我的多重创建问题的机制。

问题是如何最好地防止这种情况发生?我可以在 JS 中实现某种资源锁定,以确保在同一字段的先前更新完成之前不会发生字段更新,但我不知道如何在 JS 中优雅地“延迟”直到锁定可用.

我也可以在 Django/python 中实现锁,但我认为那更复杂。

请您参考如下方法:

在你的模型字段定义中设置unique=True

my_field = models.ForeignKey('any_model', unique=True)

这将确保 any_model 没有重复条目。