Kelas tidak memiliki anggota objek


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

Baris pertama dari fungsi itu mendapat kesalahan pada Question.objects.all():

E1101: Kelas 'Pertanyaan' tidak memiliki objek 'anggota'

Saya mengikuti tutorial dokumentasi Django dan mereka memiliki kode yang sama dan berjalan.

Saya telah mencoba memanggil sebuah instance.

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

Juga models.pykode saya untuk kelas itu adalah ini ...

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

Tidak berhasil saya masih memiliki kesalahan ini.

Saya telah membaca tentang pylint dan menjalankan ini ...

pylint --load-plugins pylint_django

Yang tidak membantu, bahkan file readme github mengatakan ...

Mencegah peringatan tentang atribut yang dihasilkan Django seperti Model.objects atau Views.request.

Saya menjalankan perintah dalam virtualenv saya, namun tidak ada.

Jadi bantuan apa pun akan bagus.


7
Gunakanpylint --generated-members=objects
Raja Simon

Maaf, jalankan dalam cmd saya dan itu tidak mengubah apa pun.
buuencrypted

apa versi python dan django kamu?
Gavin Achtemeier

1
verson python 3.6.0 dan django 1.11.3
buuencrypted

2
Bagi saya yang memecahkan masalah adalah membuat Managerinstance dalam models.pyfile. Lihat dokumentasi Django untuk info lebih lanjut.
Ikraj mohammad

Jawaban:


335

Instal pylint-djangomenggunakan pipsebagai berikut

pip install pylint-django

Kemudian di Visual Studio Code goto: Pengaturan Pengguna ( Ctrl+ ,atau File> Preferensi> Pengaturan jika tersedia) Masukkan yang berikut ini (harap perhatikan kurung kurawal yang diperlukan untuk pengaturan pengguna kustom dalam VSC):

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

di mana Pengaturan Pengguna
cegprakash

Pergi ke File-> Preferences-> Pengaturan atau gunakan "Ctrl + Comma"
Sukma Saputra

29
Luar biasa! Saya juga menunjukkan bahwa Anda dapat menempatkan opsi plugin dalam .pylintrcfile seperti ini: load-plugins=pylint_django Dan dengan cara itu akan diambil oleh CLI juga, jadi itu akan bekerja dalam pengaturan integrasi berkelanjutan.
saudara kandung

Setelah melakukan itu, saya mendapatkan [pylint] C0111:Missing module docstringkesalahan
Wisnu Sharma

1
Lebih detail dalam dokumen resmi: code.visualstudio.com/docs/python/…
Anton Danilchenko

97

@ dasiuminh2510 jawabannya sempurna. Tetapi dalam versi VSC yang lebih baru Anda tidak akan menemukan opsi untuk mengedit atau menempelkan perintah itu di Pengaturan Pengguna . Sekarang dalam versi yang lebih baru untuk menambahkan kode itu ikuti langkah-langkah ini :

Tekan ctr + sft + P untuk membuka Command Palette . Sekarang dalam palet jenis perintah Preferensi: Mengkonfigurasi Pengaturan Khusus Bahasa . Sekarang pilih Python . Di sini, di sebelah kanan tempel kode ini

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

Di dalam kurung kurawal pertama. Pastikan pylint-django itu .

Semoga ini bisa membantu!


6
jangan lupa untuk meletakkan koma di file json jika tidak, itu tidak akan berfungsi dengan benar.
Georgi Stoyanov

4
Juga jangan lupa pip install pylint-django. Jika ekstensi tidak diinstal, perubahan pada pengaturan Anda ini tampaknya gagal diam-diam, mematahkan semua linting.
Dustin Michels

1
Terima kasih. Anda dapat menemukan info yang sama di dokumentasi Kode VS resmi di sini: code.visualstudio.com/docs/python/…
Anton Danilchenko

Ini memecahkan kesalahan sebelumnya. Tapi, sekarang peringatan akan datang. Missing module docstringpylint(missing-module-docstring). Apa yang bisa dilakukan untuk ini?
Optider

34

Instal Django pylint:

pip install pylint-django

ctrl + shift + p> Preferensi: Mengkonfigurasi Pengaturan Khusus Bahasa> Python

Setting.json tersedia untuk bahasa python akan terlihat seperti di bawah ini:

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

    "[python]": {

    }
}

26

Inilah jawabannya. Didapat dari posting reddit saya ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Itu bukan kesalahan, itu hanya peringatan dari VSC. Django menambahkan properti itu secara dinamis ke semua kelas model (menggunakan banyak sihir di bawah tenda), jadi IDE tidak mengetahuinya dengan melihat deklarasi kelas, jadi itu memperingatkan Anda tentang kemungkinan kesalahan (bukan). objek sebenarnya adalah contoh Manajer yang membantu dengan meminta DB. Jika Anda benar-benar ingin menghilangkan peringatan itu, Anda bisa pergi ke semua model Anda dan menambahkan objek = models.Manager () Sekarang, VSC akan melihat objek yang dideklarasikan dan tidak akan mengeluh lagi.


13
objects = models.Manager()di kelas model melakukannya untuk saya dalam Kode VS. Terima kasih.
Mallory-Erik

22

Saya sudah mencoba semua solusi yang mungkin ditawarkan tetapi sayangnya pengaturan vscode saya tidak akan mengubah jalur linter-nya. Jadi, saya melangkah untuk menjelajahi pengaturan vscode di pengaturan> Pengaturan Pengguna> python . Temukan Linting: Jalur Pylint dan ubah menjadi "pylint_django". Jangan lupa untuk mengubah linter menjadi "pylint_django" di pengaturan> Pengaturan Pengguna> konfigurasi python dari "pyLint" menjadi "pylint_django".

Edit Linter Path


1
Bekerja untuk saya di MacOS High Sierra dan VSC 1.38, asalkan sebelumnya saya menjalankan "pip install pylint-django" di lingkungan virtual saya.
Andrés Meza-Escallón

1
ini dia. cara termudah untuk melakukannya lol
benji8

12

PEMBARUAN UNTUK VS KODE 1.40.0

Setelah melakukan:

$ pip install pylint-django

Ikuti tautan ini: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

Perhatikan bahwa cara pylintmemperhitungkannya pylint-djangoadalah dengan menetapkan:

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

dalam settings.jsonKode VS.

Tetapi setelah itu, Anda akan melihat banyak kesalahan linting baru. Kemudian, baca apa yang dikatakan di sini:

Argumen ini diteruskan setiap kali python.linting.pylintUseMinimalCheckersdiatur ke true(default). Jika Anda menentukan nilai dalam pylintArgsatau menggunakan file konfigurasi Pylint (lihat bagian selanjutnya), maka pylintUseMinimalCheckerssecara implisit diatur ke false .

Apa yang telah saya lakukan adalah membuat .pylintrcfile seperti yang dijelaskan dalam tautan, dan kemudian, mengkonfigurasi parameter berikut di dalam file (membiarkan sisa file tidak tersentuh):

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

Sekarang pylintberfungsi seperti yang diharapkan.


Alih-alih membuat file .pylintrc terpisah, Anda bisa mendapatkan efek yang sama dengan melakukan ini di settings.json Anda: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = semua "," --enable = F, E, tidak dapat dijangkau, kunci duplikat, tidak perlu-titik koma, variabel global tidak ditugaskan, variabel tidak digunakan, pengecualian biner-op-pengecualian, string format buruk, anomali-backslash-in -string, bad-open-mode "]}
sql_knievel

11

Anda dapat mengubah linter untuk ekstensi Python untuk Visual Studio Code.

Di VS buka Command Palette Ctrl + Shift + P dan ketik salah satu dari perintah berikut:

Python: Pilih Linter

ketika Anda memilih linter itu akan diinstal. Saya mencoba flake8 dan sepertinya masalah terselesaikan untuk saya.


1
Sementara ini berhasil, saya menemukan flake8 benar-benar menjengkelkan sebagai linter.
Richard Dunn

4

Hanya menambahkan pada apa yang dikatakan @ Mallory-Erik: Anda dapat menempatkannya objects = models.Manager()di modals:

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

Pertama instal pylint-django menggunakan perintah berikut

$ pip install pylint-django

Kemudian jalankan perintah kedua sebagai berikut:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django diperlukan untuk meninjau kode django dengan benar



1

Dengan melakukan Question = new Question()(saya menganggap newini salah ketik) Anda menimpa model Pertanyaan dengan niat Question. Seperti yang dikatakan Sayse dalam komentar: jangan gunakan nama yang sama untuk variabel Anda sebagai nama model. Jadi ubah ke sesuatu seperti my_question = Question().


sesuatu dengan konfigurasi pc saya dari Django dan Pytho, saya recode di macbook saya dan berfungsi dengan baik. Saya juga mencoba saran Anda dalam kode saya dan tidak ada bedanya.
buuencrypted

1

Bagaimana dengan menekan kesalahan pada setiap baris yang spesifik untuk setiap kesalahan?

Sesuatu seperti ini: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Kesalahan: [pylint] Kelas 'class_name' tidak memiliki anggota 'member_name' Itu dapat ditekan pada baris itu dengan:

  # pylint: disable=no-member

2
Sekeras apa pun solusi ini, itu satu-satunya cara untuk menjaga kewarasan seseorang. Saya mendapatkan kesalahan pada puluhan modul yang berbeda, saya tidak akan mengubah pengaturan setiap kali saya melihat yang baru.
Przemek D


0

Masalah ini terjadi ketika saya menggunakan pylint_runner

Jadi yang saya lakukan adalah membuka file .pylintrc dan menambahkan ini

# 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

Saya dapat memperbarui pengaturan pengguna. Json

Di mac saya disimpan di:

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

Di dalamnya, saya mengatur yang berikut:

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

Itu memecahkan masalah bagi saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.