Automatic DatetimeField values bypass custom validators
Los mantenedores suelen responder en 4 días
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 83/100
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
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de tortoise/tortoise-orm
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
tortoise/tortoise-orm#668 ·
Los mantenedores suelen responder en 4 días
-
UUIDField skips configured validators when writing valuesPosiblemente ocupada @IlyaKhalafi la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 25/100
tortoise/tortoise-orm#2407 ·
Los mantenedores suelen responder en 4 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
tortoise/tortoise-orm#2406 ·
Los mantenedores suelen responder en 4 días
-
TimeField skips validators for timedelta valuesPosiblemente ocupada @IlyaKhalafi la tomó hace 2 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
tortoise/tortoise-orm#2404 ·
Los mantenedores suelen responder en 4 días
-
Email domain allowlists reject equivalent mixed-case domainsPosiblemente ocupada @IlyaKhalafi la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
tortoise/tortoise-orm#2402 ·
Los mantenedores suelen responder en 4 días
Todos los issues de tortoise/tortoise-orm
Issues similares
-
binding:python bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
The Browser tab fails with a Wayland error when Open Terminal runs from a Wayland desktop sessionAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
open-webui/open-terminal#210 ·
-
triage/confirmed
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
agentscope-ai/agentscope#3807 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
NousResearch/hermes-agent#150542 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
triton-inference-server/server#9069 ·
Los mantenedores suelen responder en 1 día