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

158
Vistas
Auto-incremento Django DateField

¿Cómo se crea un DateField, que se incrementa automáticamente en 1 día de la misma forma que lo hace el campo pk ?

Por ejemplo, crearía un nuevo objeto, este sería del 16/04/2017, el próximo objeto sería del 17/04/2017, incluso si ambos se envían el mismo día.

¿Cómo haría esto?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿Qué tal anular el método de save del modelo de esta manera?

 from datetime import datetime, timedelta from django.db import models class MyModel(models.Model): date = models.DateField() # the below method will NOT work if auto_now/auto_now_add are set to True def save(self, *args, **kwargs): # count how many objects are already saved with the date this current object is saved date_gte_count = MyModel.objects.filter(date__gte=self.date).count() if date_gte_count: # there are some objects saved with the same or greater date. Increase the day by this number. self.date += timedelta(days=date_gte_count) # save object in db super().save(*args, **kwargs)

Por supuesto, lo anterior se puede implementar usando señales de Django . El pre_save .

about 4 years ago · Santiago Trujillo Denunciar

0

Así que resolví esto usando partes de la respuesta de Nik_m y también algunos de mis conocimientos.

Esencialmente, hice un ciclo while que seguía iterando y agregando un día, a diferencia de la respuesta de Nik_m, que no funciona después del tercer objeto debido a la falta de iteración.

 def save(self, *args, **kwargs): same_date_obj = Challenge.objects.filter(date=self.date) if same_date_obj.exists(): while True: if Challenge.objects.filter(date=self.date).exists(): self.date += timedelta(days=1) else: break super().save(*args, **kwargs)

EDITAR: esta respuesta ya no es válida, requiere un ciclo while y, por lo tanto, una cantidad indefinida de consultas. La respuesta modificada de @ Nik_m es mejor.

about 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