Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

192
Vistas
¿Cómo manejar la concurrencia con el método get de django queryset?

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) return

La 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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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 .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda