Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

184
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda