Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

187
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!