Automatic DatetimeField values bypass custom validators

Abierto Apto para principiantes
#2,409 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 4 días

@IlyaKhalafi ya está trabajando en esto.

Desde el 6/11/2026.

  • #2410 de @IlyaKhalafi — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
83/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

Busca DatetimeField.to_db_value en la implementación del campo e inspecciona la rama de auto_now y auto_now_add junto con la llamada al validador existente. Añade o actualiza pruebas para ambas opciones de marca de tiempo automática, incluido que un validador que rechaza el valor impida la escritura y deje sin cambios el atributo del modelo. La tarea estará terminada cuando las marcas de tiempo generadas pasen por los validadores personalizados y las pruebas de regresión pasen.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

DatetimeField.to_db_value returns from the auto_now and auto_now_add branch before calling validate. Custom validators therefore run for explicit values but are skipped when the timestamp is generated.

Reproduced on current develop with Python 3.14.6 and SQLite.

from datetime import datetime
from types import SimpleNamespace
from tortoise import fields
from tortoise.exceptions import ValidationError

def reject(value):
    raise ValidationError("timestamp rejected")

field = fields.DatetimeField(auto_now=True, validators=[reject])
field.model_field_name = "created"
instance = SimpleNamespace(_saved_in_db=False, created=None)
print(field.to_db_value(None, instance))  # timestamp instead of ValidationError

The same happens with auto_now_add=True. Expected validators to receive the generated datetime before it is assigned to the model and written. A rejecting validator should prevent the write and leave that model attribute unchanged.

Lenguaje dominante
Python
Estrellas
5.6k
Forks
540
Merge medio
4 d 7 h
PR fusionados (30 d)
31

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de tortoise/tortoise-orm

Todos los issues de tortoise/tortoise-orm

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.