在pycharm中导入模型的Intellisense问题

时间:2018-04-27 03:00:08

标签: django python-3.x django-models pycharm

将pycharm与python3一起使用我在尝试从文件结构中的一个类访问方法以导入到另一个类时遇到问题。我可以使用这些方法,但它们没有被intellisense预填充,因为我只是在学习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)

我只是想知道我的对象= GameQuerySet.as_manager()是否阻止我的intellisense预测,因为它不知道返回类型是什么?如果有人能为我澄清这个问题或者解决我原来的问题,这对我的学习很有帮助。

1 个答案:

答案 0 :(得分:0)

我发现的其他内容是我拥有pycharm的社区版本,它本身不支持用于Web开发的intellisense。我升级了很多我期待弹出的东西终于做到了。我的问题并没有具体的解决方案,所以我把它放在这里以供将来搜索初学者。祝大家好运。