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

191
Vistas
¿Cómo insinuar el tipo de `objetos` del campo modelo de Django a una clase generada dinámicamente?

Tengo un modelo de Team en mi proyecto Django. Creo su administrador de modelos personalizado con QuerySet.as_manager() .

 class TeamQuerySet(models.QuerySet): def active(self) -> "models.QuerySet[Team]": return self.filter(is_active=True) class Team(models.Model): is_active = models.BooleanField() objects = TeamQuerySet.as_manager()

Cuando intento ejecutar Team.objects.active() , mypy da el siguiente error:

 error: "Manager[Any]" has no attribute "active"
 In [5]: Team.objects Out[5]: <django.db.models.manager.ManagerFromTeamQuerySet at 0x10eee1f70>

Si estuviera definiendo explícitamente una clase TeamManager , no habría ningún problema. ¿Cómo puedo sugerir el tipo de objects de campo del modelo Django a una clase generada dinámicamente?

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

0

Basado en Manager[Any] , asumo que ya está usando django-stubs .

Desafortunadamente , parece que hay un problema abierto para hacer que QuerySet.as_manager sea genérico sobre el modelo al que está adjunto que aún no se ha resuelto.

Incluso si el PR que aborda el problema se fusionó, me temo que no resolvería su problema inmediato porque as_manager debe ser genérico sobre la subclase genérica QuerySet utilizada para crear el administrador para que tanto .active esté disponible como los atributos relacionados. al Team estar disponible.

En este sentido, este otro PR , que lamentablemente está bastante obsoleto, parece abordar adecuadamente su problema.

over 4 years ago · Santiago Trujillo Denunciar

0

He solucionado esto con un pequeño cambio por el bien de MyPy:

 _Q = TypeVar("_Q", bound="WorkflowQuerySet") class WorkflowQuerySet(models.QuerySet["WorkflowModel"]): """ Queryset for workflow objects. """ def count_objects(self) -> int: raise NotImplementedError def latest_objects(self: _Q) -> _Q: raise NotImplementedError if TYPE_CHECKING: # Create a type MyPy understands class WorkflowManager(models.Manager["WorkflowModel"]): def count_objects(self) -> int: ... def latest_objects(self) -> _Q: ... else: WorkflowManager = WorkflowQuerySet.as_manager class WorkflowModel(models.Model): """ A model that has workflow. """ objects = WorkflowManager()
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