2

在这种情况下, 我如何告诉 pycharm form.save()的返回类型是CategoryQuestion对象?

def category_ask(request):
    if request.method == 'POST':
        form = CategoryQuestion_form(request.POST)
        if form.is_valid():
            question = form.save(commit=False)
            question.who = request.user
            question.dat<tab>
4

4 回答 4

5

使用“ assert isinstance(x, Type) ”来伪造 pycharm 以了解局部变量的正确类型。然后 Pycharm 知道正确的类型,并且制表符完成将起作用:

def category_ask(request):
    if request.method == 'POST':
        form = CategoryQuestion_form(request.POST)
        if form.is_valid():
            question                = form.save(commit=False)
            assert isinstance(question, models.CategoryQuestion)
            question.who            = request.user
            question.date_created<tab>

从 pycharm 1.2 开始,不幸的是,您不能只使用未经检查的“ isinstance() ”,断言是必需的。

于 2012-06-16T06:09:18.263 回答
4

PyCharm 3(不确定早期版本)支持通过:type@type文档字符串对局部变量(以及参数)进行类型提示。

 def category_ask(request):
    if request.method == 'POST':
        form = CategoryQuestion_form(request.POST)
        if form.is_valid():
            # :type models.CategoryQuestion
            question = form.save(commit=False)
            question.who = request.user
            question.dat<tab>

查看官方文档: http: //www.jetbrains.com/pycharm/webhelp/type-hinting-in-pycharm.html#d68026e604

于 2013-09-18T06:58:13.403 回答
3

在 Pycharm 3 中,局部变量的 @type 提示很挑剔,但很有效。它必须出现在赋值之后的行上,并且似乎需要三引号语法:

        if form.is_valid():
            question = form.save()
            """@type : CategoryQuestion"""
            question.dat<tab>

查看官方文档: http: //www.jetbrains.com/pycharm/webhelp/type-hinting-in-pycharm.html#d68026e604

于 2014-09-02T20:47:54.057 回答
2

对于使用 python3.6 及更高版本的用户:
Type Hinting 现在是 python 的一部分,并且可以与 pycharm 很好地配合使用。
您可以:在变量名称后添加一个以提示其类型,例如some_varibale: str. 同样的规则也适用于参数。
所以,在这种情况下,变量被暗示是CategoryQuestion这样的:

question: CategoryQuestion = form.save(commit=False)

要知道如何输入查询集的类型提示,filter请参见此处
您还可以使用django_hint,它具有专门用于 Django 的类型提示类。

于 2019-08-04T03:51:43.580 回答