A classe não tem membro de objetos

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))

A primeira linha dessa função recebe um erro em Question.objects.all():

E1101: A classe 'Pergunta' não possui objetos 'membro'

Estou seguindo o tutorial de documentação do Django e eles têm o mesmo código em funcionamento.

Eu tentei chamar uma instância.

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

Também o meu models.pycódigo para essa classe é este ...

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

Sem sucesso, ainda tenho esse erro.

Eu li sobre o pylint e executei isso ...

pylint --load-plugins pylint_django

O que não ajudou, mesmo que o arquivo leia-me do github diga ...

Impede avisos sobre atributos gerados pelo Django, como Model.objects ou Views.request.

Eu executei o comando dentro do meu virtualenv, e ainda nada.

portanto, qualquer ajuda seria ótimo.

buuencrypted
fonte
7
Usepylint --generated-members=objects
Raja Simon
Desculpe, executei no meu cmd e não mudou nada.
buuencrypted
qual é a sua versão python e django?
Gavin Achtemeier
1
verson python 3.6.0 e django 1.11.3
buuencrypted
2
Para mim, o que resolveu o problema foi criar uma Managerinstância no models.pyarquivo. Consulte a documentação do django para mais informações.
Ikraj mohammad 19/06/19

Respostas:

335

Instale pylint-djangousando da pipseguinte maneira

pip install pylint-django

Em seguida, no Código do Visual Studio, vá para: Configurações do usuário ( Ctrl+ ,ou Arquivo> Preferências> Configurações, se disponível) Coloque o seguinte (observe as chaves que são necessárias para configurações personalizadas do usuário no VSC):

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_django"
],}
tieuminh2510
fonte
onde está Configurações do usuário
cegprakash
Vá para Arquivo-> Preferências> Configurações ou use "Ctrl + Vírgula"
Sukma Saputra
29
Excelente! Eu também apontaria que você pode colocar a opção de plug-in em um .pylintrcarquivo como este: load-plugins=pylint_django E dessa forma ela também será selecionada pela CLI, para que funcione em uma configuração de integração contínua.
Sibnerian
Após fazer isso eu estou recebendo [pylint] C0111:Missing module docstringerro
Vishnu Sharma
1
Mais detalhes no documento oficial: code.visualstudio.com/docs/python/…
Anton Danilchenko
98

@ tieuminh2510 resposta é perfeita. Porém, nas versões mais recentes do VSC, você não encontrará a opção de editar ou colar esse comando nas Configurações do Usuário . Agora, na versão mais recente para adicionar esse código, siga estas etapas :

Pressione ctr + sft + P para abrir a Paleta de comandos . Agora, na paleta de comandos, digite Preferências: Definir configurações específicas de idioma . Agora selecione Python . Aqui no lado direito cole esse código

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

Dentro das primeiras chaves. Certifique-se de que pylint-django .

Espero que isso ajude!

FightWithCode
fonte
6
não esqueça de colocar uma vírgula no arquivo json, caso contrário, ele não funcionará corretamente.
Georgi Stoyanov
4
Também não se esqueça pip install pylint-django. Se a extensão não estiver instalada, essa alteração nas suas configurações parecerá falhar silenciosamente, interrompendo todas as etapas.
Dustin Michels
1
Obrigado. Você pode encontrar as mesmas informações na documentação oficial do VS Code aqui: code.visualstudio.com/docs/python/…
Anton Danilchenko
Resolveu o erro anterior. Mas agora está chegando um aviso. Missing module docstringpylint(missing-module-docstring). O que pode ser feito para isso?
Optider
34

Instale o Django pylint:

pip install pylint-django

ctrl + shift + p> Preferências: Definir configurações específicas de idioma> Python

O settings.json disponível para a linguagem python deve se parecer com o abaixo:

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

    "[python]": {

    }
}
user3785966
fonte
26

Aqui está a resposta. Obtido do meu post no reddit ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Isso não é um erro, é apenas um aviso do VSC. O Django adiciona essa propriedade dinamicamente a todas as classes de modelo (ele usa muita mágica sob o capô), para que o IDE não saiba sobre isso olhando para a declaração de classe, então avisa sobre um possível erro (não é). objetos é de fato uma instância do Manager que ajuda na consulta ao banco de dados. Se você realmente quiser se livrar desse aviso, poderá acessar todos os seus modelos e adicionar objects = models.Manager () Agora, o VSC verá os objetos declarados e não reclamará novamente.

buuencrypted
fonte
13
objects = models.Manager()na classe de modelos fez isso por mim no VS Code. Obrigado.
Mallory-Erik
21

Eu tentei todas as soluções possíveis oferecidas, mas infelizmente minhas configurações de vscode não mudaram o caminho do linter. Então, eu pretendo explorar as configurações do vscode nas configurações> Configurações do usuário> python . Encontre Linting: Pylint Path e altere-o para "pylint_django". Não se esqueça de alterar o linter para "pylint_django" em configurações> Configurações do usuário> configuração do python de "pyLint" para "pylint_django".

Caminho do Linter

Willy satrio nugroho
fonte
1
Trabalhei para mim no MacOS High Sierra e no VSC 1.38, desde que anteriormente eu executei o "pip install pylint-django" no meu ambiente virtual.
Andrés Meza-Escallón
12

ATUALIZAÇÃO PARA CÓDIGO VS 1.40.0

Depois de fazer:

$ pip install pylint-django

Siga este link: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

Observe que a maneira de pylintlevar em consideração pylint-djangoé especificando:

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

no settings.jsoncódigo VS.

Mas depois disso, você notará muitos novos erros de fiapos. Então, leia o que disse aqui:

Esses argumentos são transmitidos sempre que python.linting.pylintUseMinimalCheckersestá definido como true(o padrão). Se você especificar um valor pylintArgsou usar um arquivo de configuração do Pylint (consulte a próxima seção), pylintUseMinimalCheckersserá implicitamente definido como false .

O que fiz foi criar um .pylintrcarquivo conforme descrito no link e, em seguida, configuramos os seguintes parâmetros dentro do arquivo (deixando o restante do arquivo intocado):

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

Agora pylintfunciona como esperado.

amedina
fonte
Em vez de criar um arquivo .pylintrc separado, você pode obter o mesmo efeito em settings.json: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, inacessível, chave duplicada, ponto-e-vírgula desnecessário, variável global não atribuída, variável não utilizada, exceção binária-op, seqüência de formato incorreto, barra invertida anômala -string, bad-open-mode "]}
sql_knievel
11

Você pode alterar o linter para a extensão Python para o Visual Studio Code.

No VS, abra a Paleta de Comandos Ctrl + Shift + P e digite um dos seguintes comandos:

Python: selecione Linter

quando você seleciona um linter, ele será instalado. Eu tentei flake8 e parece que o problema foi resolvido para mim.

traça
fonte
1
Enquanto isso funcionou, achei flake8 realmente irritante como um linter.
Richard Dunn
4

Apenas adicionando o que @ Mallory-Erik disse: Você pode colocá- objects = models.Manager()lo nos modais:

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()
LeRoy
fonte
3

Primeiro instale o pylint-django usando o seguinte comando

$ pip install pylint-django

Em seguida, execute o segundo comando da seguinte maneira:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django é necessário para revisar corretamente um código do django

Chirag Kalal
fonte
2

Se você usa python 3

python3 -m pip install pylint-django

Se python <3

python -m pip install pylint-django==0.11.1

NOTA: A versão 2.0 requer pylint> = 2.0, que não suporta mais o Python 2! ( https://pypi.org/project/pylint-django/ )

Ashen One
fonte
1

Ao fazer Question = new Question()(presumo que newseja um erro de digitação), você substitui o modelo de pergunta com uma intenção de Question. Como Sayse disse nos comentários: não use o mesmo nome para sua variável que o nome do modelo. Então mude para algo como my_question = Question().

voodoo-burger
fonte
é algo com o meu pc config do django e pytho, eu o recodifiquei no meu macbook e funciona muito bem. Também tentei sua sugestão no meu código e não fez diferença.
buuencrypted
1

Que tal suprimir erros em cada linha específica de cada erro?

Algo assim: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Erro: [pylint] A classe 'class_name' não possui membro 'member_name'. Ela pode ser suprimida nessa linha por:

  # pylint: disable=no-member
Pritam Manerao
fonte
2
Por mais forte que seja essa solução, é a única maneira de preservar a sanidade. Estou recebendo esses erros em dezenas de módulos diferentes, não vou alterar as configurações toda vez que vejo um novo.
Przemek D
1

Mude o seu linter para - flake8 e o problema desaparecerá.

Venu Gopal Tewari
fonte
0

Esse problema ocorreu quando eu uso o pylint_runner

Então, o que faço é abrir o arquivo .pylintrc e adicionar este

# 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
Tony Ngo
fonte
0

Consegui atualizar as configurações do usuário.json

No meu mac, ele foi armazenado em:

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

Dentro dela, defino o seguinte:

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

Isso resolveu o problema para mim.

Kingsley Ijomah
fonte