我遇到了一个创建多个DB对象的问题,而我只需要一个。在
我的应用程序模型由一个Form
和一个Fields
集合的FormEntry
组成。对于给定的FormEntry
,每个字段只需要一个FieldEntry
。在
我的问题是:我的UI使用ajax提交字段条目。处理提交的Django代码执行一个FieldEntry.objects.get_or_create()
来创建一个条目,但是我似乎有某种竞争条件:如果两个ajax连续快速调用fire(一旦一个字段失去焦点,它们就会立即触发),那么第二个get_or_create()
可能会在第一个完成之前发生,从而创建两个对象。我已经添加了一些代码来在比赛后清理,但是如果这个字段没有再次更新,代码将不会运行。公平地说,我不确定这是否是导致我多重创作问题的机制。在
问题是如何最好地防止这种情况?我可以在JS中实现某种资源锁,以确保在同一字段上的上一次更新完成之前不会发生字段更新,但我不知道如何在JS中优雅地“延迟”直到锁可用。在
我也可以在Django/python中实现锁,但我认为这更复杂。在
在模型字段定义集中unique=True
my_field = models.ForeignKey('any_model', unique=True)
这将确保
any_model
没有重复的条目。在听起来您需要在
FieldEntry
类中使用unique_together选项:相关问题 更多 >
编程相关推荐