Estoy usando el método django (1.5 con mysql) select_for_update para obtener datos de un modelo y entregar estos datos al usuario que lo solicite, pero cuando dos usuarios lo solicitan simultáneamente, devuelve los mismos datos para ambos usuarios, vea el código de muestra a continuación
models.py class SaveAccessCode(models.Model): code = models.CharField(max_length=10) class AccessCode(models.Model): code = models.CharField(max_length=10) state = models.CharField(max_length=10, default='OPEN') views.py def view(request, code): # for example code = 234567 acccess_code = AccessCode.objects.select_for_update().filter( code=code, state='OPEN') acccess_code.delete() SaveAccessCode.objects.create(code=code) returnLa solicitud simultánea generará dos registros de SaveAccessCode con el mismo código. Guíeme sobre cómo manejar este escenario de una mejor manera.
Debe establecer alguna marca en el modelo al hacer select_for_update , algo como:
qs.first().update(is_locked=True)`y antes de eso debería seleccionar como
qs = self.select_for_update().filter(state='OPEN', is_locked=False).order_by('id') Luego, después de que el usuario, supongo, haya hecho algo con él y lo haya guardado, establezca el indicador is_locked=False y guarde.
También haga el fetch_available_code como @staticmethod .