web-dev-qa-db-fra.com

La classe n'a pas d'objet membre

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 première ligne de cette fonction génère une erreur sur Question.objects.all () --> E1101: Class 'Questionhas no objectsmember`

Je suis le didacticiel de documentation de Django et ils ont le même code opérationnel.

J'ai essayé d'appeler une instance. 

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

Aussi mon code de models.py pour cette classe est ceci ...

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 vain, j'ai toujours cette erreur.

J'ai lu sur pylint et couru ce ...

pylint --load-plugins pylint_Django

Ce qui n'a pas aidé, même si le fichier readme de github dit ...

Empêche les avertissements concernant les attributs générés par Django, tels que Model.objects ou Views.request.

J'ai exécuté la commande dans mon virtualenv, et pourtant rien.

Donc, toute aide serait formidable

63
buuencrypted

Installez pylint-Django en utilisant pip comme suit

pip install pylint-Django

Puis dans Visual Studio Code, allez à: Paramètres utilisateur (Ctrl + , ou Fichier> Préférences> Paramètres, le cas échéant) Indiquez les éléments suivants (veuillez noter les accolades requises pour les paramètres utilisateur personnalisés dans VSC):

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_Django"
],}
217
tieuminh2510

@ tieuminh2510 réponse est parfaite. Mais dans les versions plus récentes de VSC, vous ne trouverez pas l’option permettant de modifier ou de coller cette commande dans Paramètres utilisateur. Maintenant, dans la version plus récente, en ajoutez ce code, suivez ces étapes}:

Appuyez sur ctr + sft + P pour ouvrir la palette de commandes. À présent, dans la palette de commandes, tapez Préférences: configurer les paramètres spécifiques à la langue} _. Sélectionnez maintenant Python. Ici à droite coller ce code

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

À l’intérieur des premières accolades .. Assurez-vous que pylint-Django.

J'espère que cela aidera! 

20
FightWithCode

Voici la réponse . Obtenu de mon post reddit ... https://www.reddit.com/r/Django/comments/6nq0bq/class_question_has_no_objects_member/

Ce n'est pas une erreur, c'est juste un avertissement de VSC. Django ajoute que propriété de manière dynamique à toutes les classes de modèle (il utilise beaucoup de magie sous le capot), de sorte que IDE ne le sache pas en regardant le fichier déclaration de classe, donc il vous avertit d'une erreur possible (ce n'est pas) . objects est en fait une instance de Manager facilitant l’interrogation de la base de données . Si vous voulez vraiment vous débarrasser de cet avertissement, vous pouvez vous adresser à tous vos models et add objects = models.Manager () Maintenant, VSC verra le objets déclarés et ne va pas se plaindre à nouveau.

14
buuencrypted

Vous pouvez modifier le linter pour l'extension Python pour Visual Studio Code.

Dans VS, ouvrez la palette de commandes Ctrl + Maj + P et tapez l’une des commandes suivantes:

Python: Sélectionnez Linter

lorsque vous sélectionnez un linter, il sera installé. J'ai essayé flake8 et le problème semble résolu pour moi.

6
moth

Installez d'abord pylint-Django en utilisant la commande suivante

$ pip install pylint-Django

Puis exécutez la deuxième commande comme suit:

$ pylint test_file.py --load-plugins pylint_Django

--load-plugins pylint_Django est nécessaire pour relire correctement un code de Django

1
Chirag Kalal

En faisant Question = new Question() (je suppose que new est une faute de frappe), vous écrasez le modèle Question avec une intance de Question. Comme Sayse l'a dit dans les commentaires: n'utilisez pas le même nom pour votre variable que le nom du modèle. Alors changez-le en quelque chose comme my_question = Question().

1
voodoo-burger

J'ai essayé toutes les solutions possibles mais malheureusement, les paramètres de vscode ne changent pas le chemin de linter. Donc, je vais explorer les paramètres vscode dans settings> Paramètres utilisateur> python. Trouvez Linting: Pylint Path et remplacez-le par "pylint_Django". N'oubliez pas de changer le linter en "pylint_Django" dans settings> Paramètres utilisateur> configuration python de "pyLint" à "pylint_Django".

 Linter Path Edit

0
Willy satrio nugroho

Si vous utilisez python 3

python3 -m pip install pylint-Django

Si python <3

python -m pip install pylint-Django==0.11.1

REMARQUE: La version 2.0 nécessite pylint> = 2.0, qui ne prend plus en charge Python 2! ( https://pypi.org/project/pylint-Django/ )

0
Ashen One

Changez votre linter en - flake8 et le problème disparaîtra.

0

Pourquoi ne pas supprimer les erreurs sur chaque ligne spécifique à chaque erreur?

Quelque chose comme ceci: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Erreur: [pylint] La classe 'nom_classe' n'a pas de membre 'membre_nom'Il peut être supprimé sur cette ligne par:

  # pylint: disable=no-member
0
Pritam Manerao

En ajoutant simplement à ce que @ Mallory-Erik a dit: Vous pouvez placer objects = models.Manager() dans les modaux:

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