首页 > 解决方案 > pycharm 中导入模型的 Intellisense 问题

问题描述

将pycharm与python3一起使用时,我在尝试从文件结构中的一个类访问方法以导入另一个类时遇到问题。我可以使用这些方法,但它们不是由智能感知预先填充的,这使得它非常困难,因为我只是在学习 python。我的文件如下:

tictactoe
---- gameplay
|       |--->migrations
|       |---> init.py
|       |---> admin.py
|       |---> models.py
|       |---> test.py
|       |---> views.py
---- player
        |---> migrations
        |--->templates
        |---> __init__.py
        |---> admin.py
        |---> apps.py
        |---> models.py
        |---> tests.py
        |---> utils.py
        |---> views.py

游戏玩法/Models.py

from __future__ import unicode_literals # if you use this put this first
from django.utils.encoding import python_2_unicode_compatible
from django.db import models
from django.db.models import Q
from django.contrib.auth.models import User

GAME_STATUS_CHOICES = (
   ('F', 'First Player To Move'),
   ('S', 'Second Player To Move'),
   ('W', 'First Player Wins'),
   ('L', 'Second Player Wins'),
   ('D', 'Draw')
)

class GameQuerySet(models.QuerySet):
    def games_for_user(self, user):

        return self.filter(
            Q(first_player=user) | Q(secondplayer=user)
        )

    def active(self):
        return self.filter(
            Q(status='F') | Q(status='S')
        )


@python_2_unicode_compatible
class Game(models.Model):
    first_player = models.ForeignKey(User,related_name="games_first_player", 
on_delete=models.CASCADE)
second_player = models.ForeignKey(User, related_name="games_second_player", on_delete=models.CASCADE)

start_time = models.DateTimeField(auto_now_add=True)
last_active = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=1, default='F', choices=GAME_STATUS_CHOICES)

# returns a manager object, lets us interact with result set
objects = GameQuerySet.as_manager()

def __str__(self):
    return "{0} vs {1}".format(self.first_player,  self.second_player)

播放器/views.py

from django.shortcuts import render
from gameplay.models import Game


def home(request):
    my_games = Game.objects.games_for_user(request.user)
    active_games = my_games.active()

    return render(request, "player/home.html",
                   {'games':active_games}

所以我的代码运行正常,但是当我输入 Game.objects 时。(games_for_user) 没有出现,即使我按ctrl+ space。我发现如果我这样做alt+/它有时会弹出,但不是通过正常的智能感知。当我输入 my_games 时也是如此。(活动不显示)。此外,作为一种学习体验,还有比我所拥有的更好的方法来显示文件结构。

编辑:

我发现如果我在变量 my_games 前面加上这样的返回类型

 my_games: GameQuerySet = Game.objects.games_for_user(request.user)
 active_games = my_games.active()  (<- active did show up)

我只是想知道我的 objects = GameQuerySet.as_manager() 是否阻止我的智能感知进行预测,因为它不知道返回类型是什么?如果有人可以为我澄清这一点或解决我最初的问题,那将对我的学习有很大帮助。

标签: djangopython-3.xdjango-modelspycharm

解决方案


我发现的另一件事是我有社区版的 pycharm,它本身不支持智能感知进行 Web 开发。我升级了,很多我期望弹出的东西终于做到了。对于我的问题,我没有具体的解决方案,所以我把它放在这里,以便将来搜索初学者。祝大家好运。


推荐阅读