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.

dienkripsi
sumber
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"
],}
tieuminh2510
sumber
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!

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

    }
}
pengguna3785966
sumber
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.

dienkripsi
sumber
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

Willy satrio nugroho
sumber
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.

amedina
sumber
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.

ngengat
sumber
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()
LeRoy
sumber
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

Chirag Kalal
sumber
2

Jika Anda menggunakan python 3

python3 -m pip install pylint-django

Jika python <3

python -m pip install pylint-django==0.11.1

CATATAN: Versi 2.0, membutuhkan pylint> = 2.0 yang tidak lagi mendukung Python! ( https://pypi.org/project/pylint-django/ )

Ashen One
sumber
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().

voodoo-burger
sumber
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
Pritam Manerao
sumber
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
1

Ubah linter Anda ke - flake8 dan masalah akan hilang.

Venu Gopal Tewari
sumber
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
Tony Ngo
sumber
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.

Kingsley Ijomah
sumber