클래스에 개체 멤버가 없습니다


154
def index(request):
   latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
   template = loader.get_template('polls/index.html')
   context = {'latest_question_list':latest_question_list}
   return HttpResponse(template.render(context, request))

해당 함수의 첫 번째 줄에 오류가 발생합니다 Question.objects.all().

E1101 : 'Question'클래스에 'member'개체가 없습니다.

Django 문서 자습서를 따르고 있으며 동일한 코드가 실행 중입니다.

인스턴스 호출을 시도했습니다.

Question = new Question()
and using MyModel.objects.all()

또한 models.py해당 클래스의 코드는 다음과 같습니다.

class Question(models.Model):
question_text = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published') 

def was_published_recently(self):
    return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

def __str__(self):
    return self.question_text

아무 소용이 없지만 여전히이 오류가 있습니다.

나는 pylint에 대해 읽고 이것을 실행했습니다 ...

pylint --load-plugins pylint_django

도움이되지 않은 github readme 파일조차도 ...

Model.objects 또는 Views.request와 같은 Django 생성 속성에 대한 경고를 방지합니다.

virtualenv 내에서 명령을 실행했지만 아무 것도 실행하지 않았습니다.

어떤 도움이라도 좋을 것입니다.


7
사용pylint --generated-members=objects
라자 시몬

죄송합니다, 내 cmd에서 실행했는데 변경되지 않았습니다.
buuencrypted

파이썬과 장고 버전은 무엇입니까?
Gavin Achtemeier

1
파이썬 3.6.0 verson 및 1.11.3 장고
buuencrypted

2
나 에게이 문제를 해결 한 Manager것은 models.py파일 에서 인스턴스를 만드는 것이 었습니다 . 자세한 내용은 django 설명서 를 참조하십시오 .
Ikraj mohammad 2016

답변:


335

설치를 pylint-django사용하여 pip다음과 같이

pip install pylint-django

그런 다음 Visual Studio Code에서 사용자 설정 ( Ctrl+ ,또는 파일> 환경 설정> 사용 가능한 경우 설정)으로 다음을 입력하십시오 (VSC의 사용자 정의 사용자 설정에 필요한 중괄호에 유의하십시오).

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_django"
],}

사용자 설정은 어디에
있습니까

File-> Preferences-> Settings로 이동하거나 "Ctrl + Comma"
Sukma Saputra

29
우수한! 또한 플러그인 옵션을 다음 .pylintrc과 같은 파일 에 넣을 수 있음을 지적합니다 . load-plugins=pylint_django 그러면 CLI에서도 해당 옵션을 선택할 수 있으므로 지속적인 통합 설정에서 작동합니다.
sibnerian

그렇게 한 후 [pylint] C0111:Missing module docstring오류 가 발생했습니다
Vishnu Sharma

1
공식 문서에서 더 자세한 내용 : code.visualstudio.com/docs/python/…
Anton Danilchenko

98

@ tieuminh2510 답변이 완벽합니다. 그러나 최신 버전의 VSC에서는 사용자 설정 에서 해당 명령을 편집하거나 붙여 넣을 수있는 옵션이 없습니다 . 이제 최신 버전에서 해당 코드추가하려면 다음 단계를 따르십시오 .

보도 CTR + SFT + P는 상기 열려면 명령 팔레트 . 이제 명령 팔레트에서 환경 설정 : 언어 별 설정 구성을 입력하십시오 . 이제 Python을 선택하십시오 . 여기 오른쪽 에이 코드를 붙여 넣으십시오.

"python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
    ]

첫 번째 중괄호 안에. pylint-django 인지 확인하십시오 .

이것이 도움이되기를 바랍니다!


6
그렇지 않으면 json 파일에 쉼표를 넣는 것을 잊지 마십시오. 올바르게 작동하지 않습니다.
Georgi Stoyanov 2013

4
또한 잊지 마십시오 pip install pylint-django. 확장 기능이 설치되어 있지 않으면이 설정 변경이 조용히 실패하여 모든 보풀이 끊어집니다.
Dustin Michels

1
감사합니다. 공식 VS 코드 문서에서 동일한 정보를 찾을 수 있습니다 : code.visualstudio.com/docs/python/…
Anton Danilchenko

이전 오류를 해결했습니다. 그러나 지금 경고가오고 있습니다. Missing module docstringpylint(missing-module-docstring). 이를 위해 무엇을 할 수 있습니까?
옵티 더

34

Django pylint를 설치하십시오 :

pip install pylint-django

ctrl + shift + p> 환경 설정 : 언어 별 설정 구성> Python

파이썬 언어에서 사용 가능한 settings.json은 다음과 같습니다.

{
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django"
    ],

    "[python]": {

    }
}

26

여기에 답이 있습니다. 내 레딧 게시물에서 가져 왔습니다 ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

그것은 오류가 아니며 VSC의 경고 일뿐입니다. Django는 해당 속성을 모든 모델 클래스에 동적으로 추가하므로 (두건에서 많은 마술을 사용합니다) IDE는 클래스 선언을보고 그것에 대해 알지 못하므로 가능한 오류에 대해 경고합니다 (그렇지 않습니다). 실제로 객체는 DB 쿼리를 도와주는 Manager 인스턴스입니다. 경고를 없애고 싶다면 모든 모델로 가서 objects = models.Manager ()를 추가하면됩니다. 이제 VSC는 선언 된 객체를보고 다시 불평하지 않습니다.


13
objects = models.Manager()모델 클래스에서 VS Code에서 나를 위해했습니다. 감사.
Mallory-Erik

21

가능한 모든 솔루션을 시도했지만 불행히도 내 vscode 설정은 linter 경로를 변경하지 않습니다. 그래서 설정> 사용자 설정> python 에서 vscode 설정을 탐색하려고 합니다 . Linting : Pylint Path를 찾아 "pylint_django"로 변경하십시오. 설정> 사용자 설정> Python 구성 에서 lpy를 "pylint_django"로 "pyLint"에서 "pylint_django"로 변경하는 것을 잊지 마십시오 .

린터 경로 편집


1
MacOS High Sierra 및 VSC 1.38에서 저를 위해 일했습니다. 이전에는 가상 환경에서 "pip install pylint-django"를 실행 했었습니다.
Andrés Meza-Escallón

12

VS 코드 1.40.0 업데이트

수행 한 후 :

$ pip install pylint-django

이 링크를 따르십시오 : https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

pylint고려 하는 방법 pylint-django은 다음을 지정하는 것입니다.

"python.linting.pylintArgs": ["--load-plugins", "pylint_django"]

에서 settings.jsonVS 코드의.

그러나 그 후에는 새로운 보푸라기 오류가 많이 발생합니다. 그런 다음 여기에서 말한 내용을 읽으십시오.

이 인수는가 (기본값)으로 python.linting.pylintUseMinimalCheckers설정 될 때마다 전달 true됩니다. pylintArgsPylint 구성 파일에 값을 지정 하거나 Pylint 구성 파일을 사용하면 (다음 섹션 참조) pylintUseMinimalCheckers암시 적으로 false로 설정됩니다 .

내가 한 것은 .pylintrc링크에 설명 된대로 파일을 만든 다음 파일 내부에 다음 매개 변수를 구성하여 나머지 파일은 그대로 둡니다.

load-plugins=pylint_django

disable=all

enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode

이제 pylint예상대로 작동합니다.


별도의 .pylintrc 파일을 생성하는 대신 settings.json에서이 작업을 수행하여 동일한 효과를 얻을 수 있습니다. { "python.linting.pylintArgs": [ "--load-plugins = pylint_django", "--disable = all ","--enable = F, E, 도달 할 수없는, 중복 키, 불필요한 세미콜론, 전역 변수 비 할당, 사용하지 않는 변수, 이진 연산 예외, 잘못된 형식 문자열, 비정상적인 백 슬래시 입력 -string, bad-open-mode "]}
sql_knievel

11

Visual Studio Code 용 Python 확장에 대한 linter를 변경할 수 있습니다.

VS에서 명령 팔레트 Ctrl + Shift + P를 열고 다음 명령 중 하나를 입력하십시오.

파이썬 : 린터 선택

린터를 선택하면 설치됩니다. flake8을 시도했는데 문제가 해결 된 것 같습니다.


1
이것이 효과가 있었지만, flake8은 실제로 짜증나는 것을 발견했습니다.
Richard Dunn

4

@ Mallory-Erik의 말에 덧붙여서 : objects = models.Manager()모달에 배치 할 수 있습니다 .

class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    # ...
    def __str__(self):
        return self.question_text
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    objects = models.Manager()

3

먼저 다음 명령을 사용하여 pylint-django 를 설치 하십시오

$ pip install pylint-django

그런 다음 다음과 같이 두 번째 명령을 실행하십시오.

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django는 django의 코드를 올바르게 검토하는 데 필요합니다


2

파이썬 3을 사용하는 경우

python3 -m pip install pylint-django

파이썬 <3 인 경우

python -m pip install pylint-django==0.11.1

참고 : 버전 2.0, 더 이상 Python 2를 지원하지 않는 pylint> = 2.0이 필요합니다! ( https://pypi.org/project/pylint-django/ )


1

Question = new Question()(나는 new오타 라고 가정 함) 를 수행 하면 질문 모델을 intance로 덮어 쓰고 Question있습니다. 의견에서 Sayse가 말한 것처럼 : 모델 이름과 변수에 동일한 이름을 사용하지 마십시오. 따라서 다음과 같이 변경하십시오 my_question = Question().


django와 pytho의 내 PC 구성으로 무언가, 나는 내 맥북에서 그것을 코딩했으며 잘 작동합니다. 또한 내 코드에서 제안을 시도했지만 아무런 차이가 없었습니다.
buuencrypted

1

각 오류에 대한 각 줄의 오류를 억제하는 것은 어떻습니까?

이와 같은 것 : https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

오류 : [pylint] 'class_name'클래스에 'member_name'멤버가 없습니다. 해당 행에서 다음과 같이 억제 할 수 있습니다.

  # pylint: disable=no-member

2
이 솔루션과 같은 무차별 대입은 자신의 정신을 보존하는 유일한 방법입니다. 수십 개의 다른 모듈에서 이러한 오류가 발생합니다. 새 모듈을 볼 때마다 설정을 변경하지는 않습니다.
Przemek D


0

이 문제는 pylint_runner를 사용할 때 발생했습니다.

그래서 내가하는 일은 .pylintrc 파일을 열고 이것을 추가하는 것입니다

# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=objects

0

사용자 설정을 업데이트 할 수있었습니다.

내 Mac에서는 다음에 저장되었습니다.

~/Library/Application Support/Code/User/settings.json

그 안에 다음을 설정했습니다.

{
    "python.linting.pycodestyleEnabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.pylintPath": "pylint",
    "python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
}

그것은 나를 위해 문제를 해결했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.