2017-02-22 93 views
16

Django QuerySetのレコードタイプをPython型ヒントで指定することはできますか? QuerySet[SomeModel]のようなもの?例えばPython型ヒントをDjango QuerySetで使用するには?

、我々はモデルがあります:

class SomeModel(models.Model): 
    smth = models.IntegerField() 

をそして、我々は、FUNCでのparamとして、そのモデルのクエリセットを渡したい:

def somefunc(rows: QuerySet): 
    pass 

しかし、どのように、クエリセット内のレコードのタイプを指定しますList[SomeModel]

def somefunc(rows: List[SomeModel]): 
    pass 

ただし、QuerySetを使用していますか?

答えて

-5

あなたはのparamを渡したい場合は、単にこれを行う:あなたはリスト型の利用機能list()を返したい場合

def somefunc(smth): 
    pass 

を。

+0

'smth'にタイプヒントを使い、' smth:QuerySet'を指定しますが、どのようにQuerySetのレコードのタイプを指定しますか? –

+0

これらの2つの質問を確認してください。回答が含まれている可能性があります。 1)http://stackoverflow.com/questions/32557920/what-are-type-hints-in-python-3-5 2)http://stackoverflow.com/questions/35230635/type-hinting-in-python -2 – ALJ

+4

これはパラメータを渡す方法に関する質問ではありません。 OPは、Django QuerySetオブジェクトだけを受け入れることができる関数パラメータに対して[PEP 484 type hints](https://www.python.org/dev/peps/pep-0484/)を指定する方法を尋ねています。 –

4

1つの解決法は、連合型の入力クラスを使用している可能性があります。

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 

あなたがrow引数をスライスするとき今それが返さタイプもQuerySetクラスのメソッドがあまりにもrow引数で利用可能であることをほのめかしながら、mymodelというの別のリストやmymodelというのインスタンスのいずれかであることを知っているだろう。

0

私はこれにも解決策を探しています。 Django Developersのリストにはthreadがあり、そのような機能を実装する方法について議論しています。

現在、彼らはDjango extension to mypyを開発していますが、私たちの特定の要求には不運に思えるかもしれません。 「おそらく決して」の見出しの下に彼らのロードマップでは:

クエリセットには、いくつかの部分的なサポートを持っているかもしれませんが、複雑な引数(フィルターのような ものとクエリを取得)、またはQとFオブジェクトが表現力 を超えていますそれが今のようにミーピーの可能性。

条件を改善するまで、普通のQuerySetを使用する必要があります。

関連する問題