La clase no tiene ningún miembro miembro

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

La primera línea de esa función obtiene un error en Question.objects.all():

E1101: La clase 'Pregunta' no tiene objetos 'miembro'

Estoy siguiendo el tutorial de documentación de Django y tienen el mismo código en funcionamiento.

He intentado llamar a una instancia.

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

También mi models.pycódigo para esa clase es 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

En vano todavía tengo este error.

He leído sobre pylint y ejecuté esto ...

pylint --load-plugins pylint_django

Lo que no ayudó, incluso aunque el archivo readme de github dice ...

Evita advertencias sobre atributos generados por Django como Model.objects o Views.request.

Ejecuté el comando dentro de mi virtualenv, y sin embargo nada.

Por lo que cualquier ayuda sería grande.

cifrado
fuente
77
Usopylint --generated-members=objects
Raja Simon
Lo siento, lo ejecuté en mi cmd y no cambió nada.
cifrado el
¿Cuál es su versión de Python y Django?
Gavin Achtemeier
1
verson python 3.6.0 y django 1.11.3
cifrado el
2
Para mí, lo que resolvió el problema fue crear una Managerinstancia en el models.pyarchivo. Consulte la documentación de django para obtener más información.
Ikraj mohammad

Respuestas:

335

Instale pylint-djangousando piplo siguiente

pip install pylint-django

Luego, en Visual Studio Code goto: Configuración de usuario ( Ctrl+ ,o Archivo> Preferencias> Configuración, si está disponible) Ponga lo siguiente (tenga en cuenta las llaves que se requieren para la configuración personalizada del usuario en VSC):

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_django"
],}
tieuminh2510
fuente
¿dónde está la configuración de usuario
cegprakash
Vaya a Archivo-> Preferencias-> Configuración o use "Ctrl + Coma"
Sukma Saputra
29
¡Excelente! También señalaría que puede poner la opción de complemento en un .pylintrcarchivo de esta manera: load-plugins=pylint_django y de esa manera también será recogida por la CLI, por lo que funcionaría en una configuración de integración continua.
sibneriano
Después de hacerlo, recibo un [pylint] C0111:Missing module docstringerror
Vishnu Sharma
1
Más detalles en el documento oficial: code.visualstudio.com/docs/python/…
Anton Danilchenko
97

@ tieuminh2510 la respuesta es perfecta. Pero en las versiones más recientes de VSC no encontrará la opción para editar o pegar ese comando en la Configuración del usuario . Ahora, en la versión más nueva para agregar ese código, siga estos pasos :

Presione ctr + sft + P para abrir la Paleta de comandos . Ahora en la paleta de comandos, escriba Preferencias: Configurar ajustes específicos de idioma . Ahora seleccione Python . Aquí en el lado derecho pegue este código

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

Dentro de las primeras llaves. Asegúrese de que pylint-django .

Espero que esto ayude!

FightWithCode
fuente
66
no olvide poner una coma en el archivo json de lo contrario, no funcionará correctamente.
Georgi Stoyanov
44
Además, no te olvides pip install pylint-django. Si la extensión no está instalada, este cambio en su configuración parece fallar silenciosamente, rompiendo todo el revestimiento.
Dustin Michels
1
Gracias. Puede encontrar la misma información en la documentación oficial del Código VS aquí: code.visualstudio.com/docs/python/…
Anton Danilchenko
Resolvió el error anterior. Pero, ahora viene una advertencia. Missing module docstringpylint(missing-module-docstring). ¿Qué se puede hacer para esto?
Optider
34

Instalar Django pylint:

pip install pylint-django

ctrl + shift + p> Preferencias: Configurar ajustes específicos del idioma> Python

La configuración.json disponible para el lenguaje python debería verse como a continuación:

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

    "[python]": {

    }
}
usuario3785966
fuente
26

Aquí está la respuesta. Obtenido de mi publicación en reddit ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Eso no es un error, es solo una advertencia de VSC. Django agrega esa propiedad dinámicamente a todas las clases de modelos (usa mucha magia bajo el capó), por lo que el IDE no lo sabe al mirar la declaración de clase, por lo que le advierte sobre un posible error (no lo es). objetos es, de hecho, una instancia de Manager que ayuda a consultar la base de datos. Si realmente desea deshacerse de esa advertencia, puede ir a todos sus modelos y agregar objetos = models.Manager () Ahora, VSC verá los objetos declarados y no volverá a quejarse.

cifrado
fuente
13
objects = models.Manager()en la clase de modelos lo hizo por mí en VS Code. Gracias.
Mallory-Erik
22

He probado todas las soluciones posibles ofrecidas, pero desafortunadamente mi configuración de vscode no cambiará su ruta de interfaz. Por lo tanto, me gustaría explorar la configuración de vscode en configuración> Configuración de usuario> python . Busque Linting: Pylint Path y cámbielo a "pylint_django". No olvide cambiar el linter a "pylint_django" en configuración> Configuración de usuario> configuración de python de "pyLint" a "pylint_django".

Linter Path Edit

Willy satrio nugroho
fuente
1
Trabajó para mí en MacOS High Sierra y VSC 1.38, siempre que anteriormente ejecutara "pip install pylint-django" en mi entorno virtual.
Andrés Meza-Escallón
1
eso es todo. la forma más fácil de hacerlo jajaja
benji8
12

ACTUALIZACIÓN PARA VS CODE 1.40.0

Después de hacer:

$ pip install pylint-django

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

Tenga en cuenta que la forma de pylinttener en cuenta pylint-djangoes especificando:

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

en el settings.jsonde VS Code.

Pero después de eso, notará muchos nuevos errores de linting. Luego, lee lo que dice aquí:

Estos argumentos se pasan cada vez que python.linting.pylintUseMinimalCheckersse establece en true(el valor predeterminado). Si especifica un valor pylintArgso utiliza un archivo de configuración de Pylint (consulte la siguiente sección), pylintUseMinimalCheckersse establece implícitamente en falso .

Lo que he hecho es crear un .pylintrcarchivo como se describe en el enlace, y luego, configuré los siguientes parámetros dentro del archivo (dejando el resto del archivo intacto):

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

Ahora pylintfunciona como se esperaba.

amedina
fuente
En lugar de crear un archivo .pylintrc separado, puede obtener el mismo efecto haciendo esto en su settings.json: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, inalcanzable, clave duplicada, punto y coma innecesario, variable global no asignada, variable no utilizada, excepción de operación binaria, cadena de formato incorrecto, barra invertida anómala -string, bad-open-mode "]}
sql_knievel
11

Puede cambiar el linter para la extensión de Python para Visual Studio Code.

En VS, abra la Paleta de comandos Ctrl + Shift + P y escriba uno de los siguientes comandos:

Python: Seleccione Linter

cuando selecciona un linter, se instalará. Intenté flake8 y parece que el problema se resolvió para mí.

polilla
fuente
1
Si bien esto funcionó, encontré a flake8 realmente molesto como linter.
Richard Dunn
4

Simplemente agregue lo que dijo @ Mallory-Erik: Puede colocarlo objects = models.Manager()en los modales:

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
fuente
3

Primero instale pylint-django usando el siguiente comando

$ pip install pylint-django

Luego ejecute el segundo comando de la siguiente manera:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django es necesario para revisar correctamente un código de django

Chirag Kalal
fuente
2

Si usas Python 3

python3 -m pip install pylint-django

Si python <3

python -m pip install pylint-django==0.11.1

NOTA: ¡La versión 2.0 requiere pylint> = 2.0 que ya no es compatible con Python 2! ( https://pypi.org/project/pylint-django/ )

Ceniciento Uno
fuente
1

Al hacer Question = new Question()(supongo que newes un error tipográfico), está sobrescribiendo el modelo de Pregunta con una intancia de Question. Como dijo Sayse en los comentarios: no use el mismo nombre para su variable que el nombre del modelo. Así que cámbialo a algo así my_question = Question().

hamburguesa vudú
fuente
es algo con la configuración de mi pc de django y pytho, la grabé en mi macbook y funciona bien. También probé su sugerencia en mi código y no hizo ninguna diferencia.
buuencrypted
1

¿Qué hay de suprimir errores en cada línea específica de cada error?

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

Error: [pylint] La clase 'class_name' no tiene miembro 'member_name'. Se puede suprimir en esa línea mediante:

  # pylint: disable=no-member
Pritam Manerao
fuente
2
A pesar de la fuerza bruta que es esta solución, es la única forma de preservar la cordura. Recibo esos errores en docenas de módulos diferentes, no voy a cambiar la configuración cada vez que veo uno nuevo.
Przemek D
1

Cambie su linter a - flake8 y el problema desaparecerá.

Venu Gopal Tewari
fuente
0

Este problema sucede cuando uso pylint_runner

Entonces, lo que hago es abrir el archivo .pylintrc y agregar esto

# 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
fuente
0

Pude actualizar la configuración de usuario.json

En mi mac estaba almacenado en:

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

Dentro de él, configuro lo siguiente:

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

Eso resolvió el problema para mí.

Kingsley Ijomah
fuente