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.


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"
],}

¿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!


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]": {

    }
}

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.


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


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.


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í.


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

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



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


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

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


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

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í.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.