python - template - django views
¿Cómo utilizar las sugerencias de tipo Python con Django QuerySet? (3)
Estoy buscando una solución a esto también. La lista de Desarrolladores de Django tiene un thread en el que están discutiendo cómo implementar una característica de este tipo.
Actualmente están desarrollando una extensión de Django para mypy , pero parece que no tenemos suerte con nuestra solicitud específica. En su hoja de ruta bajo el encabezado de "Probablemente nunca":
Los Querysets pueden tener algún soporte parcial, pero los argumentos complejos (como los de filtro y obtener consultas) o los objetos Q y F están más allá de las posibilidades expresivas de mypy como lo son ahora.
Dicho esto, solo tendremos que usar el QuerySet
ole QuerySet
hasta que las condiciones mejoren.
¿Es posible especificar el tipo de registros en Django QuerySet con sugerencias de tipo Python? Algo como QuerySet[SomeModel]
?
Por ejemplo, tenemos modelo:
class SomeModel(models.Model):
smth = models.IntegerField()
Y queremos pasar el QuerySet de ese modelo como param en func:
def somefunc(rows: QuerySet):
pass
Pero cómo especificar el tipo de registros en QuerySet, como con List[SomeModel]
:
def somefunc(rows: List[SomeModel]):
pass
pero con QuerySet?
Si quieres pasar un param solo haz esto:
def somefunc(smth):
pass
Si quieres devolver un tipo de lista usa la función list()
.
Una solución puede ser usar la clase de escritura Union.
from typing import Union, List
from django.db.models import QuerySet
from my_app.models import MyModel
def somefunc(row: Union[QuerySet, List[MyModel]]):
pass
Ahora, cuando corte el argumento de la row
, sabrá que el tipo devuelto es otra lista de MyModel o una instancia de MyModel, mientras que también indica que los métodos de la clase QuerySet
están disponibles en el argumento de la row
.