Sınıfın nesne üyesi yok


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

Bu işlevin ilk satırında bir hata var Question.objects.all():

E1101: 'Soru' sınıfında nesne 'üyesi' yok

Django dokümantasyon eğitimini takip ediyorum ve aynı koda sahipler ve çalışıyorlar.

Bir örnek çağırmayı denedim.

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

Ayrıca models.pyo sınıf için kodum şu ...

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

Boşuna hala bu hataya sahibim.

Pilint hakkında okudum ve bunu çalıştırdım ...

pylint --load-plugins pylint_django

Bu da yardımcı olmadı, github benioku dosyasında bile ...

Model.objects veya Views.request gibi Django tarafından üretilen niteliklerle ilgili uyarıları önler.

Komutu virtualenv'imde çalıştırdım ama hiçbir şey olmadı.

Yani herhangi bir yardım harika olur.


7
Kullanımpylint --generated-members=objects
Raja Simon

Üzgünüm, cmd'mde çalıştırdım ve hiçbir şeyi değiştirmedi.
şifrelenmiş

python ve django sürümünüz nedir?
Gavin Achtemeier

1
verson python 3.6.0 ve django 1.11.3
buuencrypted

2
Benim için sorunu çözen şey dosyada bir Managerörnek oluşturmaktı models.py. Daha fazla bilgi için django belgelerine bakın .
Ikraj mohammad

Yanıtlar:


370

Yükleme pylint-djangokullanarak pipaşağıdaki gibi

pip install pylint-django

Daha sonra Visual Studio Code'da: Kullanıcı Ayarları ( Ctrl+ ,veya Dosya> Tercihler> varsa Ayarlar) Aşağıdakileri girin (lütfen VSC'deki özel kullanıcı ayarları için gerekli olan kaşlı ayraçları not edin):

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

1
Kullanıcı Ayarları nerede
cegprakash

Dosya-> Tercihler-> Ayarlar'a gidin veya "Ctrl + Virgül" seçeneğini kullanın
Sukma Saputra

33
Mükemmel! Eklenti seçeneğini şu şekilde bir .pylintrcdosyaya koyabileceğinizi de belirtmek isterim : load-plugins=pylint_djangoVe bu şekilde CLI tarafından da alınacak, böylece sürekli bir entegrasyon ortamında çalışacaktır.
sibnerian

Bunu yaptıktan sonra [pylint] C0111:Missing module docstringhata alıyorum
Vishnu Sharma


115

@ tieuminh2510 cevap mükemmel. Ancak VSC'nin daha yeni sürümlerinde, bu komutu Kullanıcı Ayarlarında düzenleme veya yapıştırma seçeneğini bulamayacaksınız . Şimdi daha yeni sürümde bu kodu eklemek için şu adımları izleyin :

Komut Paletini açmak için ctr + sft + P tuşlarına basın . Şimdi komut paletinde Tercihler: Dile Özgü Ayarları Yapılandırın . Şimdi Python'u seçin . Burada sağ tarafa bu kodu yapıştırın

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

İlk küme parantezlerinin içinde. Bu pylint-django olduğundan emin olun .

Umarım bu yardımcı olur!


8
json dosyasına virgül koymayı unutmayın, aksi takdirde düzgün çalışmayacaktır.
Georgi Stoyanov

4
Ayrıca unutma pip install pylint-django. Uzantı yüklenmemişse, ayarlarınızdaki bu değişiklik sessizce başarısız olur ve tüm tüy bırakmaz.
Dustin Michels

1
Teşekkür ederim. Aynı bilgileri resmi VS Code belgelerinde de bulabilirsiniz: code.visualstudio.com/docs/python/…
Anton Danilchenko

1
Önceki hatayı çözdü. Ama şimdi bir uyarı geliyor. Missing module docstringpylint(missing-module-docstring). Bunun için ne yapılabilir?
Optider

40

Django pilini yükleyin:

pip install pylint-django

ctrl + shift + p> Tercihler: Dile Özgü Ayarları Yapılandır> Python

Python dili için mevcut olan settings.json aşağıdaki gibi görünmelidir:

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

    "[python]": {

    }
}

31

Sunulan tüm olası çözümleri denedim ama şans eseri vscode ayarlarım linter yolunu değiştirmeyecek. Bu yüzden, vscode ayarlarını, ayarlar> Kullanıcı Ayarları> python'da keşfetmeye çalışıyorum . Linting: Pylint Path'i bulun ve "pylint_django" olarak değiştirin. Linter'i ayarlar> Kullanıcı Ayarları> python yapılandırmasında "pylint_django" olarak "pyLint" den "pylint_django" ya değiştirmeyi unutmayın.

Linter Yolu Düzenleme


1
MacOS High Sierra ve VSC 1.38'de benim için çalıştı, daha önce sanal ortamımda "pip install pylint-django" çalıştırmam şartıyla.
Andrés Meza-Escallón

28

İşte cevap. Reddit gönderimden aldım ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Bu bir hata değil, sadece VSC'den bir uyarı. Django, bu özelliği tüm model sınıflarına dinamik olarak ekler (başlık altında çok fazla sihir kullanır), böylece IDE sınıf bildirimine bakarak bunu bilmez, bu nedenle sizi olası bir hata hakkında uyarır (değil). nesneler aslında DB'nin sorgulanmasına yardımcı olan bir Manager örneğidir. Bu uyarıdan gerçekten kurtulmak istiyorsanız, tüm modellerinize gidebilir ve nesneler = modeller ekleyebilirsiniz.Manager () Şimdi, VSC ilan edilen nesneleri görecek ve bundan bir daha şikayet etmeyecektir.


13
objects = models.Manager()modeller sınıfında VS Code'da benim için yaptı. Teşekkürler.
Mallory-Erik

21

VS KODU İÇİN GÜNCELLEME 1.40.0

Yaptıktan sonra:

$ pip install pylint-django

Şu bağlantıyı izleyin: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

pylintHesaba pylint-djangokatmanın yolunun şunları belirterek olduğuna dikkat edin :

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

içinde settings.jsonVS Kanununun.

Ancak bundan sonra birçok yeni tüy bırakma hatası fark edeceksiniz. Sonra burada ne yazdığını okuyun:

Bu bağımsız değişkenler, her python.linting.pylintUseMinimalCheckersayarlandığında true(varsayılan) iletilir . pylintArgsBir Pylint yapılandırma dosyasında bir değer belirtirseniz veya kullanırsanız (sonraki bölüme bakın), pylintUseMinimalCheckersdolaylı olarak false olarak ayarlanır .

Yaptığım şey, .pylintrcbağlantıda açıklandığı gibi bir dosya oluşturmak ve ardından dosyanın içinde aşağıdaki parametreleri yapılandırmaktır (dosyanın geri kalanına dokunmadan):

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

Şimdi pylintbeklendiği gibi çalışıyor.


2
Ayrı bir .pylintrc dosyası oluşturmak yerine, bunu settings.json içinde yaparak aynı etkiyi elde edebilirsiniz: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, erişilemez, yinelenen anahtar, gereksiz noktalı virgül, genel değişken atanmamış, kullanılmayan değişken, ikili işlem istisnası, kötü biçim dizesi, anormal ters eğik çizgi -string, bad-open-mode "]}
sql_knievel

12

Visual Studio Code için Python uzantısı için linter'i değiştirebilirsiniz.

VS'de Ctrl + Shift + P Komut Paletini açın ve aşağıdaki komutlardan birini yazın:

Python: Linter Seçin

bir linter seçtiğinizde kurulacaktır. Flake8'i denedim ve sorun benim için çözülmüş görünüyor.


1
Bu işe yararken, flake8'i bir linter olarak gerçekten sinir bozucu buldum.
Richard Dunn

7

@ Mallory-Erik'in söylediği şeye ekliyoruz: objects = models.Manager()Modallere yerleştirebilirsiniz:

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

1
Django 3 ve Python 3.8 ile benim için çalışan tek çözüm bu. Teşekkürler dostum.
Andreli

3

İlk önce aşağıdaki komutu kullanarak pylint-django'yu kurun

$ pip install pylint-django

Ardından ikinci komutu aşağıdaki gibi çalıştırın:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django, django kodunu doğru şekilde incelemek için gereklidir


3

Linterinizi - flake8 olarak değiştirin ve problem ortadan kalkacaktır.


1
Bunu yararlı buldum, CMD + SHIFT + P'ye tıkladım ve Python'u aradım: Linter'i seçin ve sadece flake8'i seçin!
Ayoub


3

Kullanıcı ayarlarını güncelleyebildim.json

Mac'imde şu konumdaydı:

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

İçinde aşağıdakileri belirledim:

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

Bu benim için sorunu çözdü.


2

Her bir hataya özgü her satırdaki hataları bastırmaya ne dersiniz?

Bunun gibi bir şey: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Hata: [pylint] 'class_name' sınıfının 'üye_adı' üyesi yok Bu satırda şu şekilde bastırılabilir:

  # pylint: disable=no-member

3
Bu çözüm ne kadar kaba kuvvet olsa da, kişinin akıl sağlığını korumanın tek yolu budur. Düzinelerce farklı modülde bu hataları alıyorum, her yeni bir tane gördüğümde ayarları değiştirmeyeceğim.
Przemek D

1

Yaparak Question = new Question()( newbir yazım hatası olduğunu varsayıyorum ), Soru modelinin üzerine bir giriş ile yazıyorsunuz Question. Sayse'nin yorumlarda söylediği gibi: Değişkeniniz için modelin adıyla aynı adı kullanmayın. Öyleyse gibi bir şeye değiştirin my_question = Question().


django ve pytho'nun pc yapılandırmasıyla ilgili bir şey, onu macbook'uma yeniden kodladım ve gayet iyi çalışıyor. Ayrıca kodumdaki önerinizi denedim ve hiçbir fark yaratmadı.
57'de şifrelenmiş

0

Bu sorun pylint_runner kullandığımda oluyor

Yaptığım şey .pylintrc dosyasını açmak ve bunu eklemek

# 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

Sorular tablonuza nesneler ekleyin = Yok. Bu benim için hatayı çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.