La classe non ha membri oggetti


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 prima riga di quella funzione riceve un errore su Question.objects.all():

E1101: La classe 'Domanda' non ha oggetti 'membro'

Sto seguendo il tutorial sulla documentazione di Django e hanno lo stesso codice attivo e funzionante.

Ho provato a chiamare un'istanza.

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

Anche il mio models.pycodice per quella classe è questo ...

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

Inutilmente ho ancora questo errore.

Ho letto di Pylint e ho eseguito questo ...

pylint --load-plugins pylint_django

Il che non ha aiutato, anche se il file readme di github dice ...

Previene gli avvisi sugli attributi generati da Django come Model.objects o Views.request.

Ho eseguito il comando all'interno del mio virtualenv, eppure niente.

Quindi qualsiasi aiuto sarebbe fantastico.


7
Usapylint --generated-members=objects
Raja Simon il

Scusa, l'ho eseguito nel mio cmd e non ha cambiato nulla.
costruito il

qual è la tua versione di python e django?
Gavin Achtemeier,

1
verson python 3.6.0 e django 1.11.3
buuencrypted

2
Per me ciò che ha risolto il problema è stato la creazione di Managerun'istanza nel models.pyfile. Fare riferimento alla documentazione di Django per ulteriori informazioni.
Ikraj mohammad,

Risposte:


335

Installare pylint-djangousando pipcome segue

pip install pylint-django

Quindi in Visual Studio Code vai a: Impostazioni utente ( Ctrl+ ,o File> Preferenze> Impostazioni se disponibili) Inserisci quanto segue (notare le parentesi graffe necessarie per le impostazioni utente personalizzate in VSC):

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

dove si trova User Settings
cegprakash,

Vai su File-> Preferenze-> Impostazioni o usa "Ctrl + Virgola"
Sukma Saputra

29
Eccellente! Vorrei anche sottolineare che è possibile inserire l'opzione del plug-in in un .pylintrcfile in questo modo: load-plugins=pylint_django E in questo modo verrà rilevata anche dalla CLI, quindi funzionerebbe in un'impostazione di integrazione continua.
sibnerian

Dopo aver fatto ciò, ricevo un [pylint] C0111:Missing module docstringerrore
Vishnu Sharma,

1
Maggiori dettagli nel documento ufficiale: code.visualstudio.com/docs/python/…
Anton Danilchenko,

97

@ tieuminh2510 la risposta è perfetta. Ma nelle versioni più recenti di VSC non troverai l'opzione per modificare o incollare quel comando in Impostazioni utente . Ora nella versione più recente per aggiungere quel codice segui questi passaggi :

Premi ctr + sft + P per aprire la Tavolozza comandi . Ora nella palette dei comandi digitare Preferenze: Configura impostazioni specifiche della lingua . Ora seleziona Python . Qui a destra incolla questo codice

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

All'interno delle prime parentesi graffe. Assicurati che Pylint-Django .

Spero che questo possa aiutare!


6
non dimenticare di inserire una virgola nel file json, altrimenti non funzionerà correttamente.
Georgi Stoyanov,

4
Inoltre, non dimenticare di pip install pylint-django. Se l'estensione non è installata, questa modifica alle impostazioni sembra non riuscire in modo silenzioso, interrompendo tutti gli sfilacciamenti.
Dustin Michels,

1
Grazie. Puoi trovare le stesse informazioni nella documentazione ufficiale del VS Code qui: code.visualstudio.com/docs/python/…
Anton Danilchenko,

Ha risolto l'errore precedente. Ma ora sta arrivando un avvertimento. Missing module docstringpylint(missing-module-docstring). Cosa si può fare per questo?
Optider

34

Installa il pylint di Django:

pip install pylint-django

ctrl + shift + p> Preferenze: configura impostazioni specifiche della lingua> Python

Il settings.json disponibile per il linguaggio Python dovrebbe essere simile al seguente:

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

    "[python]": {

    }
}

26

Ecco la risposta. Ottenuto dal mio post reddit ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Non è un errore, è solo un avvertimento di VSC. Django aggiunge quella proprietà in modo dinamico a tutte le classi del modello (usa molta magia sotto il cofano), quindi l'IDE non lo sa guardando la dichiarazione di classe, quindi ti avverte di un possibile errore (non lo è). oggetti è in effetti un'istanza di Manager che aiuta a interrogare il DB. Se vuoi davvero sbarazzarti di quell'avvertimento potresti andare su tutti i tuoi modelli e aggiungere oggetti = models.Manager () Ora, VSC vedrà gli oggetti dichiarati e non se ne lamenterà più.


13
objects = models.Manager()nella classe dei modelli lo ha fatto per me in VS Code. Grazie.
Mallory-Erik,

22

Ho provato tutte le possibili soluzioni offerte ma sfortunatamente le mie impostazioni di vscode non cambieranno il suo percorso di linter. Quindi, tride per esplorare le impostazioni di vscode in Impostazioni> Impostazioni utente> Python . Trova Linting: Pylint Path e modificalo in "pylint_django". Non dimenticare di cambiare la linter in "pylint_django" in Impostazioni> Impostazioni utente> Configurazione python da "pyLint" a "pylint_django".

Modifica percorso linter


1
Ha funzionato per me su MacOS High Sierra e VSC 1.38, a condizione che in precedenza avessi eseguito "pip install pylint-django" nel mio ambiente virtuale.
Andrés Meza-Escallón,

1
questo è. il modo più semplice per farlo lol
benji8

12

AGGIORNAMENTO PER VS CODE 1.40.0

Dopo aver fatto:

$ pip install pylint-django

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

Si noti che il modo in cui pylinttener conto pylint-djangoè quello di specificare:

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

nel settings.jsoncodice VS.

Ma dopo ciò, noterai molti nuovi errori di sfilacciatura. Quindi, leggi cosa ha detto qui:

Questi argomenti vengono passati ogni volta che python.linting.pylintUseMinimalCheckersè impostato su true(impostazione predefinita). Se si specifica un valore pylintArgso si utilizza un file di configurazione Pylint (consultare la sezione successiva), pylintUseMinimalCheckersviene implicitamente impostato su false .

Quello che ho fatto è creare un .pylintrcfile come descritto nel collegamento e quindi configurare i seguenti parametri all'interno del file (lasciando intatto il resto del file):

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

Ora pylintfunziona come previsto.


Invece di creare un file .pylintrc separato, puoi ottenere lo stesso effetto facendo questo nel tuo settings.json: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, irraggiungibile, chiave duplicata, punto e virgola non necessario, variabile globale non assegnata, variabile non utilizzata, eccezione binaria-op, stringa di formato errata, backslash anomalo -string, bad-open-mode "]}
sql_knievel

11

È possibile modificare la linter per l'estensione Python per Visual Studio Code.

In VS apri la Tavolozza dei comandi Ctrl + Maiusc + P e digita uno dei seguenti comandi:

Python: selezionare Linter

quando si seleziona una linter, verrà installata. Ho provato flake8 e sembra che il problema sia stato risolto per me.


1
Mentre questo ha funzionato, ho trovato flake8 davvero fastidioso come linter.
Richard Dunn,

4

Aggiungendo semplicemente ciò che @ Mallory-Erik ha detto: puoi objects = models.Manager()inserirlo nelle modali:

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

Prima installa pylint-django usando il seguente comando

$ pip install pylint-django

Quindi eseguire il secondo comando come segue:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django è necessario per rivedere correttamente un codice di django



1

Facendo Question = new Question()(suppongo che newsia un refuso) stai sovrascrivendo il modello di domanda con un'intenzione di Question. Come Sayse ha detto nei commenti: non usare lo stesso nome per la tua variabile come il nome del modello. Quindi cambialo in qualcosa del genere my_question = Question().


è qualcosa con la mia configurazione del pc di django e pytho, l'ho ricodificato sul mio macbook e funziona benissimo. Inoltre ho provato il tuo suggerimento nel mio codice e non ha fatto alcuna differenza.
costruito il

1

Che ne dite di sopprimere gli errori su ogni riga specifica per ogni errore?

Qualcosa del genere: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Errore: [pylint] La classe 'class_name' non ha membri 'member_name' Può essere soppresso su quella riga da:

  # pylint: disable=no-member

2
Per quanto bruta sia questa soluzione, è l'unico modo per preservare il buonsenso. Ricevo quegli errori su dozzine di moduli diversi, non cambierò le impostazioni ogni volta che ne vedrò uno nuovo.
Przemek D,


0

Questo problema è successo quando uso pylint_runner

Quindi quello che faccio è aprire il file .pylintrc e aggiungere questo

# 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

Sono stato in grado di aggiornare l'utente settings.json

Sul mio mac è stato memorizzato in:

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

Al suo interno, ho impostato quanto segue:

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

Ciò ha risolto il problema per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.