คลาสไม่มีสมาชิกวัตถุ


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

บรรทัดแรกของฟังก์ชันนั้นได้รับข้อผิดพลาดเมื่อQuestion.objects.all():

E1101: ชั้นเรียน 'คำถาม' ไม่มี 'สมาชิก' วัตถุ

ฉันกำลังติดตามกวดวิชาเอกสาร Django และพวกเขามีรหัสเดียวกันและทำงาน

ฉันได้ลองโทรไปแล้ว

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

models.pyรหัสของฉันสำหรับคลาสนั้นคือนี่ ...

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

ไม่มีประโยชน์ฉันยังคงมีข้อผิดพลาดนี้

ฉันได้อ่าน pylint แล้ววิ่งนี่ ...

pylint --load-plugins pylint_django

ซึ่งไม่ได้ช่วยแม้แต่ไฟล์ github readme ก็บอกว่า ...

ป้องกันคำเตือนเกี่ยวกับคุณลักษณะที่สร้างโดย Django เช่น Model.objects หรือ Views.request

ฉันรันคำสั่งภายใน virtualenv ของฉัน แต่ก็ไม่มีอะไร

ดังนั้นความช่วยเหลือใด ๆ จะดีมาก


7
ใช้pylint --generated-members=objects
ราชาไซม่อน

ขออภัยวิ่งในคำสั่งของฉันและมันก็ไม่ได้เปลี่ยนอะไร
buuencrypted

python และ django เวอร์ชันใดของคุณ?
Gavin Achtemeier

1
verson python 3.6.0 และ django 1.11.3
buuencrypted

2
สำหรับฉันสิ่งที่แก้ไขปัญหาได้สร้างManagerอินสแตนซ์ในmodels.pyไฟล์ อ้างถึงเอกสาร djangoสำหรับข้อมูลเพิ่มเติม
Ikraj mohammad

คำตอบ:


335

ติดตั้งpylint-djangoโดยใช้pipดังนี้

pip install pylint-django

จากนั้นใน Visual Studio Code ไปที่: การตั้งค่าผู้ใช้ ( Ctrl+ ,หรือไฟล์> การตั้งค่า> การตั้งค่าถ้ามี) ใส่ต่อไปนี้ (โปรดสังเกตวงเล็บปีกกาที่จำเป็นสำหรับการตั้งค่าผู้ใช้ที่กำหนดเองใน VSC):

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

การตั้งค่าผู้ใช้อยู่ที่ไหน
cegprakash

ไปที่ File-> Preferences-> Settings หรือใช้ "Ctrl + Comma"
Sukma Saputra

29
ยอดเยี่ยม ฉันยังชี้ให้เห็นว่าคุณสามารถใส่ตัวเลือกปลั๊กอินใน.pylintrcไฟล์ดังนี้: load-plugins=pylint_django และวิธีการที่ CLI จะถูกเลือกเช่นนั้นดังนั้นมันจะทำงานในการตั้งค่าการรวมอย่างต่อเนื่อง
sibnerian

หลังจากทำเช่นนั้นฉันได้รับ[pylint] C0111:Missing module docstringข้อผิดพลาด
Vishnu Sharma

1
รายละเอียดเพิ่มเติมในเอกสารอย่างเป็นทางการ: code.visualstudio.com/docs/python/…
Anton Danilchenko

98

@ tieuminh2510 คำตอบนั้นสมบูรณ์แบบ แต่ในรุ่นใหม่ของ VSC คุณจะไม่พบตัวเลือกในการแก้ไข thhe หรือวางคำสั่งว่าในการตั้งค่าผู้ใช้ ตอนนี้ในรุ่นใหม่ที่จะเพิ่มว่ารหัสทำตามขั้นตอนนี้ :

กดCTR + SFT + Pเพื่อเปิดการสั่ง Palette ตอนนี้ในจานสีคำสั่งประเภทการตั้งค่า: การตั้งค่าเฉพาะการกำหนดค่าภาษา ตอนนี้เลือกหลาม ที่นี่ทางด้านขวาวางรหัสนี้

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

ภายในวงเล็บปีกกาแรก ตรวจสอบให้แน่ใจว่าpylint-Django

หวังว่านี่จะช่วยได้!


6
อย่าลืมใส่เครื่องหมายจุลภาคในไฟล์ json มิเช่นนั้นจะทำงานไม่ถูกต้อง
Georgi Stoyanov

4
pip install pylint-djangoยังไม่ลืมที่จะ หากไม่ได้ติดตั้งส่วนขยายการเปลี่ยนแปลงการตั้งค่าของคุณดูเหมือนจะล้มเหลวอย่างเงียบ ๆ
ดัสติน Michels

1
ขอบคุณ. คุณสามารถค้นหาข้อมูลเดียวกันได้จากเอกสารรหัส VS อย่างเป็นทางการที่นี่: code.visualstudio.com/docs/python/…
Anton Danilchenko

มันแก้ไขข้อผิดพลาดก่อนหน้านี้ แต่ตอนนี้เตือนกำลังมา Missing module docstringpylint(missing-module-docstring). สิ่งนี้สามารถทำได้
Optider

34

ติดตั้ง Django pylint:

pip install pylint-django

ctrl + shift + p> การตั้งค่า: กำหนดการตั้งค่าภาษาเฉพาะ> Python

settings.json สำหรับภาษาไพ ธ อนควรมีลักษณะดังนี้:

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

    "[python]": {

    }
}

26

นี่คือคำตอบ รับจากโพสต์ reddit ของฉัน ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

นั่นไม่ใช่ข้อผิดพลาดมันเป็นเพียงคำเตือนจาก VSC Django เพิ่มคุณสมบัตินั้นแบบไดนามิกให้กับคลาสโมเดลทั้งหมด (ใช้เวทย์มนตร์ภายใต้ประทุน) ดังนั้น IDE ไม่ทราบเกี่ยวกับมันโดยดูที่การประกาศคลาสดังนั้นจึงเตือนคุณเกี่ยวกับข้อผิดพลาดที่อาจเกิดขึ้น (ไม่ใช่) วัตถุคืออินสแตนซ์ของผู้จัดการที่ช่วยในการสืบค้น DB หากคุณต้องการกำจัดคำเตือนนั้นจริงๆคุณสามารถไปยังทุกรุ่นของคุณและเพิ่ม object = models.Manager () ตอนนี้ VSC จะเห็นวัตถุที่ประกาศและจะไม่บ่นอีกต่อไป


13
objects = models.Manager()ในชั้นเรียนแบบจำลองทำได้สำหรับฉันใน VS Code ขอบคุณ
มัลลอรี่ - เอริค

21

ฉันได้ลองใช้วิธีแก้ปัญหาที่เป็นไปได้ทั้งหมดแล้ว แต่การตั้งค่า vscode ของฉันจะไม่เปลี่ยนเส้นทางของ linter ดังนั้นผม tride การสำรวจการตั้งค่า vscode ในการตั้งค่า> การตั้งค่าผู้ใช้> หลาม ค้นหาLinting: Pylint Pathและเปลี่ยนเป็น "pylint_django" อย่าลืมเปลี่ยน linter เป็น "pylint_django" ที่การตั้งค่า> การตั้งค่าผู้ใช้> การกำหนดค่า pythonจาก "pyLint" เป็น "pylint_django"

การแก้ไขเส้นทาง Linter


1
ทำงานให้กับฉันใน MacOS High Sierra และ VSC 1.38 โดยที่ก่อนหน้านี้ฉันใช้งาน "pip install pylint-django" ในสภาพแวดล้อมเสมือนจริงของฉัน
Andrés Meza-Escallón

12

อัปเดตสำหรับ VS CODE 1.40.0

หลังจากทำ:

$ pip install pylint-django

ตามลิงค์นี้: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

ขอให้สังเกตว่าวิธีที่จะทำให้pylintมีการพิจารณาpylint-djangoคือการระบุ:

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

ในsettings.jsonของรหัส VS

แต่หลังจากนั้นคุณจะสังเกตเห็นข้อผิดพลาดที่เป็นขุยใหม่จำนวนมาก จากนั้นอ่านสิ่งที่กล่าวไว้ที่นี่:

อาร์กิวเมนต์เหล่านี้จะถูกส่งผ่านเมื่อใดก็ตามที่python.linting.pylintUseMinimalCheckersตั้งค่าเป็นtrue(ค่าเริ่มต้น) ถ้าคุณระบุค่าในpylintArgsหรือใช้แฟ้มการกำหนดค่า pylint (ดูหัวข้อถัดไป) จากนั้นมีการตั้งค่าโดยปริยายเป็นเท็จpylintUseMinimalCheckers

สิ่งที่ฉันได้ทำคือการสร้าง.pylintrcไฟล์ตามที่อธิบายไว้ในลิงค์จากนั้นกำหนดค่าพารามิเตอร์ต่อไปนี้ภายในไฟล์ (ปล่อยให้ไฟล์ส่วนที่เหลือไม่มีการแตะ)

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

ตอนนี้pylintทำงานตามที่คาดไว้


แทนที่จะสร้างไฟล์. pylintrc แยกต่างหากคุณสามารถรับเอฟเฟกต์เดียวกันได้ในการตั้งค่าของคุณ: {"python.linting.pylintArgs": ["- load-plugins = pylint_django", "--disable = all "," --enable = F, E, ไม่สามารถเข้าถึง, คีย์ที่ซ้ำกัน, เซมิโคลอนที่ไม่จำเป็น, global-variable-not-assign, ตัวแปรที่ไม่ได้ใช้, binary-op-exception, Bad-format-string, anomalous-backslash-in -string, โหมดเปิดไม่ดี "]}
sql_knievel

11

คุณสามารถเปลี่ยน linter สำหรับ Python extension สำหรับ Visual Studio Code

ใน VS เปิด Command Palette Ctrl + Shift + P แล้วพิมพ์คำสั่งอย่างใดอย่างหนึ่งต่อไปนี้:

Python: เลือก Linter

เมื่อคุณเลือก linter มันจะถูกติดตั้ง ฉันลอง flake8 และดูเหมือนว่าปัญหาจะได้รับการแก้ไข


1
ขณะนี้ใช้งานได้ฉันพบ flake8 น่ารำคาญจริง ๆ เป็น linter
Richard Dunn

4

เพียงเพิ่มสิ่งที่ @ Mallory-Erik กล่าวไว้: คุณสามารถวางobjects = models.Manager()ไว้ในรูปแบบ:

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

ขั้นแรกให้ติดตั้งpylint-djangoโดยใช้คำสั่งต่อไปนี้

$ pip install pylint-django

จากนั้นรันคำสั่งที่สองดังนี้:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django เป็นสิ่งจำเป็นสำหรับการตรวจสอบรหัส django อย่างถูกต้อง


2

ถ้าคุณใช้ python 3

python3 -m pip install pylint-django

ถ้าหลาม <3

python -m pip install pylint-django==0.11.1

หมายเหตุ: เวอร์ชั่น 2.0 ต้องใช้ pylint> = 2.0 ซึ่งไม่รองรับ Python 2 อีกต่อไป! ( https://pypi.org/project/pylint-django/ )


1

โดยการทำQuestion = new Question()(ผมถือว่าnewเป็นพิมพ์ผิด) คุณกำลังเขียนทับรูปแบบคำถามที่มี intance Questionของ อย่างที่ Sayse กล่าวไว้ในความคิดเห็น: อย่าใช้ชื่อเดียวกันสำหรับตัวแปรของคุณเป็นชื่อของโมเดล ดังนั้นเปลี่ยนเป็นอะไรที่คล้ายmy_question = Question()กัน


มันมีบางอย่างที่มีการตั้งค่าพีซีของฉันเป็น django และ pytho ฉันก็บันทึกมันใหม่บน macbook และใช้งานได้ดี ฉันก็ลองแนะนำคุณในรหัสของฉันและมันก็ไม่แตกต่างกัน
buuencrypted

1

วิธีการเกี่ยวกับการระงับข้อผิดพลาดในแต่ละบรรทัดโดยเฉพาะกับแต่ละข้อผิดพลาด?

บางสิ่งเช่นนี้: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

ข้อผิดพลาด: [pylint] คลาส 'class_name' ไม่มีสมาชิก 'member_name' สามารถระงับได้ในบรรทัดนั้นโดย:

  # pylint: disable=no-member

2
ในฐานะที่เป็นสัตว์เดรัจฉานอย่างที่แก้ปัญหานี้มันเป็นวิธีเดียวที่จะรักษาความมีสติ ฉันได้รับข้อผิดพลาดเหล่านั้นในโมดูลที่แตกต่างกันหลายสิบฉันจะไม่เปลี่ยนการตั้งค่าทุกครั้งที่เห็นใหม่
Przemek D


0

ปัญหานี้เกิดขึ้นเมื่อฉันใช้ pylint_runner

ดังนั้นสิ่งที่ฉันทำคือเปิดไฟล์. pylintrc แล้วเพิ่มอันนี้

# 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

ฉันสามารถอัปเดตการตั้งค่าผู้ใช้

ใน mac ของฉันมันถูกเก็บไว้ใน:

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

ภายในนั้นฉันตั้งค่าต่อไปนี้:

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

ที่แก้ไขปัญหาสำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.