Интеллектуальная проблема с импортированными моделями в pycharm - PullRequest
0 голосов
/ 27 апреля 2018

Использование 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

Gameplay / 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 + пробел . Я обнаружил, что если я сделаю alt + / , он иногда всплывает, но не в обычном смысле слова. То же самое происходит, когда я набираю my_games. (активный не отображается). Кроме того, как опыт обучения, есть лучший способ показать структуру файла, чем у меня.

EDIT:

Я обнаружил, что если я предвожу свою переменную my_games с типом возврата, подобным этому

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

Мне было просто интересно, если мои объекты = GameQuerySet.as_manager () не позволяют моему интеллигенту предсказать, потому что он не знает, что такое возвращаемый тип? Если бы кто-нибудь мог уточнить это для меня или решить мою первоначальную проблему, это было бы большим подспорьем в моем обучении.

1 Ответ

0 голосов
/ 18 июня 2018

Что-то еще, что я обнаружил, было то, что у меня была общественная версия pycharm, которая изначально не поддерживает intellisense для веб-разработки. Я обновился и многое из того, что я ожидал всплыть, наконец-то сделал. У меня не было конкретного решения моего вопроса, поэтому я поместил его здесь для будущих поисков новичков. Удачи всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...