โมเดล Django“ ไม่ได้ประกาศ app_label อย่างชัดเจน”


119

ฉันสิ้นปัญญา หลังจากแก้ไขปัญหามาหลายสิบชั่วโมงอาจมากกว่านั้นฉันคิดว่าในที่สุดฉันก็ทำธุรกิจได้ แต่แล้วฉันก็:

Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

มีข้อมูลมากมายเกี่ยวกับเรื่องนี้บนเว็บและไม่มีวิธีแก้ปัญหาใดที่สามารถแก้ไขปัญหาของฉันได้ คำแนะนำใด ๆ จะได้รับการชื่นชมอย่างมาก

ฉันใช้ Python 3.4 และ Django 1.10

จาก settings.py ของฉัน:

INSTALLED_APPS = [
    'DeleteNote.apps.DeletenoteConfig',
    'LibrarySync.apps.LibrarysyncConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

และไฟล์ apps.py ของฉันมีลักษณะดังนี้:

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

และ

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'

2
คุณไม่มี django.contrib.contenttypes ใน INSTALLED_APPS
RemcoGerlich

2
จากนั้นสิ่งที่เป็นไปได้อื่น ๆ คือคุณนำเข้าก่อนที่จะมีการโหลดโมเดลแอพบางตัวที่อยู่ก่อนประเภทเนื้อหาใน INSTALLED_APPS ใช้หรือไม่?
RemcoGerlich

1
มันผิดปกติคุณไม่มีโปรเจ็กต์หรือแอพของคุณเองเลยเหรอ
RemcoGerlich

1
ทุกสิ่งที่มี models.py ควรอยู่ใน INSTALLED_APPS; และหากหนึ่งในนั้นใช้ประเภทเนื้อหา (เนื่องจากคีย์ต่างประเทศทั่วไปให้พูด) ก็จะต้องอยู่ภายใต้ประเภทเนื้อหาในรายการ
RemcoGerlich

1
น่าผิดหวังน่าจะเป็นสิ่งที่เล็กน้อยมาก แต่ยากที่จะบอกว่าจากที่นี่ที่ไหน คุณนำเข้าข้อมูลของคุณใน settings.py หรือมากกว่านั้น?
RemcoGerlich

คำตอบ:


91

คุณพลาดการใส่ชื่อแอปพลิเคชันของคุณลงในไฟล์การตั้งค่าหรือไม่? myAppNameConfigเป็นชั้นเริ่มต้นที่สร้างขึ้นที่ apps.py โดยmyAppName .manage.py createappคำสั่ง โดยmyAppNameคือชื่อแอปของคุณ

settings.py

INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

ด้วยวิธีนี้ไฟล์การตั้งค่าจะค้นหาสิ่งที่คุณต้องการเรียกแอปพลิเคชันของคุณ คุณสามารถเปลี่ยนรูปลักษณ์ได้ในภายหลังในไฟล์ apps.py โดยเพิ่มรหัสต่อไปนี้ใน

myAppName / apps.py

class myAppNameConfig(AppConfig):
    name = 'myAppName'
    verbose_name = 'A Much Better Name'

โอเคดังนั้นนี่จึงสมเหตุสมผลกับฉันมากกับตัวอย่างและฉันได้ดำเนินการเปลี่ยนแปลงตามความเข้าใจของไวยากรณ์แล้ว แต่ฉันก็ยังคงกดปุ่มข้อผิดพลาดเดียวกัน 100% ฉันได้อัปเดตโพสต์ของฉันให้ละเอียดแล้ว
Slbox

3
ขอบคุณ @xeberdee และ @RemcoGerlich สำหรับความช่วยเหลือในเรื่องนี้ ในท้ายที่สุดวิธีแก้ปัญหาของฉันคือโหลดแอพของฉันด้านล่างแอพ django.contrib และย้ายรายการของimport django django.setup()ฉันใน settings.py ไปที่ด้านล่างINSTALLED_APPSรายการ
Slbox

2
เพียงแค่อยากรู้ - ทำไมต้องนำเข้า django django.setup () ในไฟล์การตั้งค่า นอกจากนี้แอปของคุณควรโหลดแม้ว่าจะเป็นแอปแรกในรายการแอปที่ติดตั้งก็ตาม
Xeberdee

1
อะไรคือความแตกต่างระหว่างสิ่งนี้กับสิ่งที่เขาเขียนในคำถามของเขา?
Matt D

1
ประเด็นคือวิธีที่แอปถูกค้นพบในการตั้งค่า INSTALLED_APPS ผ่านฟิลด์ชื่อของคลาสในไฟล์กำหนดค่า แก้ไขโพสต์แล้ว
Xeberdee

36

ฉันได้รับข้อผิดพลาดเดียวกันและฉันไม่รู้ว่าจะแก้ไขปัญหานี้อย่างไร ฉันใช้เวลาหลายชั่วโมงกว่าจะสังเกตเห็นว่าฉันมี init.py ที่ไดเร็กทอรีเดียวกับ Manage.py จาก django

ก่อน:

|-- myproject
  |-- __init__.py
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

หลังจาก:

|-- myproject
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

ค่อนข้างสับสนที่คุณได้รับข้อผิดพลาด "ไม่ประกาศป้ายกำกับแอปพลิเคชันที่ชัดเจน" แต่การลบไฟล์initนี้ช่วยแก้ปัญหาของฉันได้


2
สูบบุหรี่ศักดิ์สิทธิ์ฉันมองสิ่งนี้มานาน - จับได้ดี!
user3167654

ฉันพยายามสร้างเอกสารโดยใช้ pydoc และแอปของฉันถูกซ่อนโดยไม่มี init.py
Serg Smyk

20

ฉันมีข้อผิดพลาดเดียวกันทุกประการเมื่อเรียกใช้การทดสอบกับ PyCharm ฉันได้แก้ไขโดยการตั้งค่าDJANGO_SETTINGS_MODULEตัวแปรสภาพแวดล้อมอย่างชัดเจน หากคุณกำลังใช้ PyCharm เพียงแค่กดแก้ไขการตั้งค่าปุ่มและเลือกตัวแปรของสภาพแวดล้อม

ตั้งค่าตัวแปรเป็นyour_project_name.settingsและควรแก้ไขสิ่งนั้น

ดูเหมือนว่าข้อผิดพลาดนี้เกิดขึ้นเพราะ PyCharm manage.pyใช้การทดสอบด้วยตัวของมันเอง


1
มีปัญหานี้ในการรัน Pycharm Tests แม้ว่าการรันเซิร์ฟเวอร์ผ่าน Pycharm ไม่ต้องการให้ฉันเพิ่มการตั้งค่า เพิ่ม DJANGO_SETTINGS_MODULE ด้วยตนเองในการกำหนดค่าสำหรับการทดสอบที่แก้ไขได้ถ้าสำหรับฉัน
PhoebeB

1
นอกจากนี้เมื่อแก้ไขการกำหนดค่าการแก้ไขเทมเพลตจะมีประโยชน์
Yngve Høiseth

1
การตั้งค่า -> ภาษาและกรอบงาน -> Django -> การเพิ่มค่าภายใต้การตั้งค่าจะตั้งค่าโดยอัตโนมัติDJANGO_SETTINGS_MODULEสำหรับการกำหนดค่าการทดสอบ Django และ Django ใหม่แต่ละรายการ
Tobias Ernst

FYI ฉันทำตามที่ระบุไว้ในโซลูชันนี้ทุกประการและไม่ได้ผลในครั้งแรก จะเปิดออก PyCharm ไม่ได้บันทึกDJANGO_SETTINGS_MODULEเป็นครั้งแรกเมื่อคลิกแล้วApply OKฉันทำมันเป็นครั้งที่สองและตอนนี้มันได้ผล ดูเหมือนจะเป็นความแปลกประหลาดของ PyCharm
MikeyE

ผมต้องให้แน่ใจว่าฉันประกาศการนำเข้าอย่างถูกต้องจากคุณ: <app>.<module> import <class>- PyCharm <app>นำเข้ารถยนต์ที่ขาดหายไป เมื่อฉันแก้ไขสิ่งนี้แล้ว (ตรวจสอบโมดูลที่เกี่ยวข้องด้วย) แล้วมันก็ใช้ได้
Matthew Hegarty

18

ฉันได้รับสิ่งนี้เมื่อฉันใช้./manage.py shell แล้วฉันนำเข้าจากไดเร็กทอรีระดับโปรเจ็กต์โดยไม่ได้ตั้งใจ

# don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model

something_using_a_model()

กรณีของฉันฉันต้องเปลี่ยนจากfrom fields import xเป็นfrom .fields import x
daigorocub

13

ในฐานะ noob ที่ใช้Python3ฉันพบว่าอาจเป็นข้อผิดพลาดในการนำเข้าแทนที่จะเป็นข้อผิดพลาด Django

ไม่ถูกต้อง:

from someModule import someClass

ขวา:

from .someModule import someClass

สิ่งนี้เกิดขึ้นเมื่อไม่กี่วันที่ผ่านมา แต่ฉันไม่สามารถทำซ้ำได้จริงๆ ... ฉันคิดว่ามีเพียงคนที่เพิ่งรู้จัก Django เท่านั้นที่อาจพบสิ่งนี้ฉันจำได้ว่า:

ลองลงทะเบียนโมเดลใน admin.py:

from django.contrib import admin
from user import User
admin.site.register(User)

ลองเรียกใช้เซิร์ฟเวอร์ข้อผิดพลาดมีลักษณะดังนี้

some lines...
File "/path/to/admin.py" ,line 6
tell you there is an import error
some lines...
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label

เปลี่ยนuserเป็น.userแก้ไขปัญหา


9
ยินดีต้อนรับสู่ stackoverflow! ฉันรู้สึกว่าจำเป็นต้องพูดว่าคำตอบของคุณไม่เกี่ยวข้องกับคำถามของ OP ในฐานะ Noob คุณควรระมัดระวังในการเสนอแนวทางแก้ไขโดยไม่ต้องตรวจสอบความถูกต้องก่อน แต่โปรดกลับมาอีกเรื่อย ๆ และโพสต์คำตอบที่เป็นรูปธรรมเมื่อทำได้ - ขอบคุณ!
evadeflow

1
ฉันต้องการความคิดเห็นเพิ่มเติมเกี่ยวกับ Stack เหมือนกับ Xeon Phil ของคุณ บ่อยครั้งที่ผู้ใช้ใหม่ถูกไล่ล่าโดยผู้แสดงความคิดเห็นที่คลั่งไคล้ไม่พอใจที่พวกเขาไม่ได้เป็นผู้เชี่ยวชาญด้านกองซ้อนในวันแรก
Slbox

1
คุณพูดถูก @evadeflow คำตอบแรกของฉันดูไม่เกี่ยวข้องจริงๆฉันพยายามชี้แจงคำตอบอย่างไรก็ตามหวังว่าคำตอบอาจเป็นประโยชน์
rpstw

มันเป็นปัญหาที่คล้ายกันในกรณีของฉัน 'จาก ..core.models นำเข้า CommonInfo' ต้องกลายเป็น 'จาก apps.core.models นำเข้า CommonInfo'
user42488

นี่เป็นปัญหาของฉันไม่ชัดเจนเนื่องจากเกิดขึ้นใน 2 ไฟล์ที่แยกจากกัน แดงคุณนำเข้าซ้อน! ขอแสดงความนับถือการปฏิเสธที่โง่เขลาของฉันต่อการเปลี่ยนแปลงที่สมเหตุสมผลของ 2to3!
9999 ปี

13

ฉันมีปัญหาเดียวกันในตอนนี้ ฉันแก้ไขของฉันด้วยการเพิ่มเนมสเปซในชื่อแอป หวังว่าจะมีคนพบว่าสิ่งนี้เป็นประโยชน์

apps.py

from django.apps import AppConfig    

class SalesClientConfig(AppConfig):
        name = 'portal.sales_client'
        verbose_name = 'Sales Client'

8

ฉันได้รับข้อผิดพลาดนี้ในการนำเข้าโมเดลในการทดสอบกล่าวคือเนื่องจากโครงสร้างโครงการ Django นี้:

|-- myproject
    |-- manage.py
    |-- myproject
    |-- myapp
        |-- models.py  # defines model: MyModel
        |-- tests
            |-- test_models.py

ในไฟล์ที่test_models.pyฉันนำเข้าMyModelด้วยวิธีนี้:

from models import MyModel

ปัญหาได้รับการแก้ไขหากนำเข้าด้วยวิธีนี้:

from myapp.models import MyModel

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

PS: อาจจะช้าไปหน่อย แต่ฉันไม่พบคำตอบในคนอื่น ๆ เกี่ยวกับวิธีแก้ปัญหานี้ในโค้ดของฉันและฉันต้องการแบ่งปันวิธีแก้ปัญหาของฉัน


juliocesar คุณเป็นแชมป์ ขอบคุณ. นี่เป็นข้อผิดพลาดที่ไร้สาระ
Kirk

2
ฉันใช้เวลานานกว่าที่คาดไว้เพื่อค้นหาสิ่งนี้ ฉันใช้การนำเข้าแบบสัมพัทธ์ในไฟล์ test.py ของฉัน from .models import MyModelมีข้อผิดพลาดเมื่อใช้ การเปลี่ยนเพื่อfrom myapp.models import MyModelแก้ไขปัญหา
กุฏ

@monkut เดียวกันที่นี่. ฉันสงสัยว่าเหตุใดจึงเกิดขึ้น ฉันใช้โฟลเดอร์แอพที่กำหนดเองอยู่แล้ว "/ apps" ในรูทโปรเจ็กต์เพิ่มไปยังพา ธ

4

หลังจากพบปัญหานี้อยู่เรื่อย ๆ และกลับมาที่คำถามนี้ต่อไปฉันคิดว่าฉันจะแบ่งปันว่าปัญหาของฉันคืออะไร

ทุกอย่างที่ @Xeberdee ถูกต้องให้ทำตามนั้นและดูว่าสามารถแก้ปัญหาได้หรือไม่ถ้าไม่ใช่ปัญหาของฉัน:

ใน apps.py ของฉันนี่คือสิ่งที่ฉันมี:

class AlgoExplainedConfig(AppConfig):
    name = 'algo_explained'
    verbose_name = "Explain_Algo"
    ....

สิ่งที่ฉันทำคือเพิ่มชื่อโปรเจ็กต์หน้าชื่อแอพของฉันดังนี้:

class AlgoExplainedConfig(AppConfig):
name = '**algorithms_explained**.algo_explained'
verbose_name = "Explain_Algo"

และนั่นช่วยแก้ปัญหาของฉันได้และฉันก็สามารถเรียกใช้คำสั่ง makemigrations และ migrate ได้หลังจากนั้น! โชคดี


3

วันนี้ฉันมีข้อผิดพลาดนี้พยายามเรียกใช้การทดสอบ Django เนื่องจากฉันใช้from .models import *ไวยากรณ์ชวเลขในไฟล์ของฉัน ปัญหาคือฉันมีโครงสร้างไฟล์ดังนี้:

    apps/
      myapp/
        models/
          __init__.py
          foo.py
          bar.py

และในmodels/__init__.pyฉันกำลังนำเข้าโมเดลของฉันโดยใช้ไวยากรณ์ชวเลข:

    from .foo import *
    from .bar import *

ในแอปพลิเคชันของฉันฉันกำลังนำเข้าโมเดลดังนี้:

    from myapp.models import Foo, Bar

สิ่งนี้ทำให้เกิดDjango model doesn't declare an explicit app_labelเมื่อทำงาน./manage.py testเมื่อทำงาน

ในการแก้ไขปัญหาฉันต้องนำเข้าจากเส้นทางแบบเต็มอย่างชัดเจนในmodels/__init__.py:

    from myapp.models.foo import *
    from myapp.models.bar import *

ที่ดูแลข้อผิดพลาด

H / t https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a


นี่เป็นปัญหาสำหรับฉันเช่นกัน ขอบคุณ!
Sam Creamer

3

ในกรณีของฉันนี่คือสิ่งที่เกิดขึ้นเพราะผมใช้เส้นทางโมดูลญาติในโครงการระดับurls.py , INSTALLED_APPSและapps.pyแทนการถูกฝังในรากโครงการ คือพา ธ โมดูลสัมบูรณ์ตลอดแทนที่จะเป็นพา ธ โมดูลสัมพัทธ์ + แฮ็ก

ไม่ว่าฉันจะยุ่งกับเส้นทางในINSTALLED_APPSและapps.pyในแอพของฉันมากแค่ไหนฉันก็ไม่สามารถรับทั้งสองอย่างrunserverและpytestทำงานได้จนกว่าทั้งสามอย่างนั้นฝังรากอยู่ในรูทโปรเจ็กต์

โครงสร้างโฟลเดอร์:

|-- manage.py
|-- config
    |-- settings.py
    |-- urls.py
|-- biz_portal
    |-- apps
        |-- portal
            |-- models.py
            |-- urls.py
            |-- views.py
            |-- apps.py

ด้วยต่อไปนี้ฉันจะทำงานmanage.py runserverและ gunicorn กับ WSGI และการใช้งานportalแอพพลิเคมุมมองโดยไม่มีปัญหา แต่ pytest จะมีข้อผิดพลาดModuleNotFoundError: No module named 'apps'แม้จะมีDJANGO_SETTINGS_MODULEได้รับการกำหนดค่าอย่างถูกต้อง

config / settings.py:

INSTALLED_APPS = [
    ...
    "apps.portal.apps.PortalConfig",
]

biz_portal / apps / portal / apps.py:

class PortalConfig(AppConfig):
    name = 'apps.portal'

config / urls.py:

urlpatterns = [
    path('', include('apps.portal.urls')),
    ...
]

การเปลี่ยนการอ้างอิงแอปใน config / settings.py เป็นbiz_portal.apps.portal.apps.PortalConfigและPortalConfig.nameเพื่อbiz_portal.apps.portalอนุญาตให้ pytest ทำงาน (ฉันยังไม่มีการทดสอบportalมุมมอง) แต่runserverจะเกิดข้อผิดพลาดกับ

RuntimeError: โมเดลคลาส apps.portal.models.Business ไม่ประกาศ app_label ที่ชัดเจนและไม่ได้อยู่ในแอปพลิเคชันใน INSTALLED_APPS

ในที่สุดผมก็ grepped สำหรับapps.portalเพื่อดูสิ่งที่ยังคงใช้เส้นทางสัมพันธ์และพบว่าการกำหนดค่าที่ / urls.py biz_portal.apps.portal.urlsยังควรใช้


แฮ็กกับเส้นทางสัมพัทธ์ ......... ก็เช่นเดียวกัน ข้อมูลเชิงลึกของคุณช่วยฉันได้มาก
zar3bski

2

ฉันพบข้อผิดพลาดนี้เมื่อพยายามสร้างการย้ายข้อมูลสำหรับแอปเดียวซึ่งมีการย้ายข้อมูลที่ผิดรูปแบบเนื่องจากมีการรวมคอมไพล์ เช่น

manage.py makemigrations myapp

เมื่อฉันลบการย้ายข้อมูลแล้วเรียกใช้:

manage.py makemigrations

ข้อผิดพลาดไม่เกิดขึ้นและสร้างการย้ายข้อมูลสำเร็จแล้ว


ขอบคุณ. การย้ายข้อมูลยังคงเป็นเรื่องที่น่าหงุดหงิด
HashRocketSyntax

2

ฉันมีปัญหาที่คล้ายกัน แต่ฉันสามารถแก้ปัญหาของฉันได้โดยระบุ app_label อย่างชัดเจนโดยใช้ Meta Class ในคลาสโมเดลของฉัน

class Meta:
    app_label  = 'name_of_my_app'

ขอบคุณเบนจามิน! ในโครงการ Django ของฉันฉันใช้ Sphinx ในการสร้างเอกสารและคำสั่ง :: autoclass ให้ข้อผิดพลาด "app_label" จนกว่าฉันจะเพิ่มลงในคลาส Meta ของ Model ตามที่คุณแนะนำ
Stefan Musarra

1

ฉันได้รับข้อผิดพลาดนี้ขณะพยายามอัปเกรดแอปDjango Rest Frameworkเป็น DRF 3.6.3 และ Django 1.11.1

สำหรับคนอื่นในสถานการณ์นี้ฉันพบวิธีแก้ปัญหาของฉันในปัญหา GitHubซึ่งเป็นการยกเลิกการUNAUTHENTICATED_USERตั้งค่าในการตั้งค่า DRF :

# webapp/settings.py
...
REST_FRAMEWORK = {
    ...
    'UNAUTHENTICATED_USER': None
    ...
}

1

ฉันเพิ่งพบปัญหานี้และพบว่าเกิดอะไรขึ้น เนื่องจากไม่มีคำตอบก่อนหน้านี้อธิบายถึงปัญหาที่เกิดขึ้นกับฉันฉันจึงโพสต์ให้คนอื่นฟัง:

  • ปัญหามาจากการใช้จากโฟลเดอร์รากโครงการของฉันแล้วย้ายแอปของฉันไปยังโฟลเดอร์เด็กที่มีpython migrate.py startapp myAppmv myApp myFolderWithApps/
  • ผมเขียน myApp.models python migrate.py makemigrationsและวิ่ง ทั้งหมดเป็นไปด้วยดี
  • จากนั้นฉันก็ทำเช่นเดียวกันกับแอพอื่นที่นำเข้าโมเดลจาก myApp คาบุม! ฉันพบข้อผิดพลาดนี้ขณะดำเนินการสร้างข้อมูล นั่นเป็นเพราะฉันต้องใช้myFolderWithApps.myAppเพื่ออ้างอิงแอพของฉัน แต่ฉันลืมอัปเดต MyApp / apps.py ดังนั้นฉันจึงแก้ไข myApp / apps.py, settings / INSTALLED_APPS และเส้นทางการนำเข้าของฉันในแอพที่สองของฉัน
  • แต่แล้วข้อผิดพลาดก็ยังคงเกิดขึ้น: สาเหตุคือฉันมีการย้ายข้อมูลที่พยายามนำเข้าโมเดลจาก myApp โดยใช้เส้นทางที่ไม่ถูกต้อง ฉันพยายามแก้ไขไฟล์การโอนย้าย แต่ไปถึงจุดที่ง่ายกว่าในการรีเซ็ตฐานข้อมูลและลบการย้ายข้อมูลเพื่อเริ่มต้นใหม่

เพื่อให้เรื่องยาวสั้น: - ตอนแรกปัญหามาจากชื่อแอพที่ไม่ถูกต้องใน apps.py ของ myApp ในการตั้งค่าและในเส้นทางการนำเข้าของแอพที่สองของฉัน - แต่ยังไม่เพียงพอที่จะแก้ไขเส้นทางในสามตำแหน่งนี้เนื่องจากการย้ายข้อมูลถูกสร้างขึ้นโดยมีการนำเข้าที่อ้างถึงชื่อแอปที่ไม่ถูกต้อง ดังนั้นข้อผิดพลาดเดียวกันนี้ยังคงเกิดขึ้นขณะย้ายข้อมูล (ยกเว้นครั้งนี้จากการย้ายข้อมูล)

ดังนั้น ... ตรวจสอบการโยกย้ายของคุณและขอให้โชคดี!


1

ฉันพบข้อผิดพลาดที่คล้ายกันขณะสร้าง API ใน Django rest_framework

RuntimeError: Model class apps.core.models.University ไม่ได้ประกาศ> app_label อย่างชัดเจนและไม่ได้อยู่ในแอปพลิเคชันใน INSTALLED_APPS

คำตอบของ luke_aus ช่วยฉันด้วยการแก้ไขurls.pyของฉัน

จาก

from project.apps.views import SurgeryView

ถึง

from apps.views import SurgeryView

สำหรับฉันฉันซ่อนมันไว้ในการโยกย้าย ไม่แน่ใจว่าเกิดขึ้นได้อย่างไร แต่การลบชื่อโครงการ / เส้นทางคงที่
Michael Thompson

1

ในกรณีของฉันฉันได้รับข้อผิดพลาดนี้เมื่อย้ายรหัสจาก Django 1.11.11 เป็น Django 2.2 ฉันกำลังกำหนดคลาสที่ได้รับ FileSystemStorage แบบกำหนดเอง ใน Django 1.11.11 ฉันมีบรรทัดต่อไปนี้ใน models.py:

from django.core.files.storage import Storage, DefaultStorage

และต่อมาในไฟล์ฉันมีนิยามคลาส:

class MyFileStorage(FileSystemStorage):

อย่างไรก็ตามใน Django 2.2 ฉันจำเป็นต้องอ้างอิงFileSystemStorageคลาสอย่างชัดเจนเมื่อนำเข้า:

from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage

และ voila! ข้อผิดพลาดจะหายไป

โปรดทราบว่าทุกคนกำลังรายงานส่วนสุดท้ายของข้อความแสดงข้อผิดพลาดที่ส่งโดยเซิร์ฟเวอร์ Django อย่างไรก็ตามหากคุณเลื่อนขึ้นคุณจะพบสาเหตุที่อยู่ตรงกลางของข้อผิดพลาด mambo-jambo


1

ในกรณีของฉันฉันสามารถหาวิธีแก้ไขได้และจากการดูรหัสของคนอื่น ๆ มันอาจจะเป็นปัญหาเดียวกัน .. ฉันแค่เพิ่ม 'django.contrib.sites' ในรายการแอพที่ติดตั้งใน settings.py ไฟล์.

หวังว่านี่จะช่วยใครสักคน นี่เป็นการมีส่วนร่วมครั้งแรกของฉันในชุมชนการเขียนโค้ด


1

TL; DR: การเพิ่ม__init__.pyว่างช่วยแก้ปัญหาให้ฉัน

ฉันได้รับข้อผิดพลาดนี้ใน PyCharm และตระหนักว่าไฟล์การตั้งค่าของฉันไม่ได้ถูกนำเข้าเลย ไม่มีข้อผิดพลาดที่ชัดเจนในการแจ้งสิ่งนี้ แต่เมื่อฉันใส่รหัสไร้สาระลงใน settings.py มันไม่ทำให้เกิดข้อผิดพลาด

ฉันมีsettings.pyอยู่ในโฟลเดอร์local_settings อย่างไรก็ตามฉันจะต้องรวม__init__.pyไว้ในโฟลเดอร์เดียวกันเพื่อให้สามารถนำเข้าได้ เมื่อฉันเพิ่มสิ่งนี้ข้อผิดพลาดก็หายไป


1

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

from .models import Businessต่อไปนี้จะไม่ทำงาน ใช้เส้นทางการนำเข้าแบบเต็มแทน:from myapp.models import Business


1

หากทุกอย่างล้มเหลวและหากคุณเห็นข้อผิดพลาดนี้ขณะพยายามนำเข้าใน PyCharm "Python console" (หรือ "Django console"):

ลองรีสตาร์ทคอนโซล

นี่เป็นเรื่องที่น่าอับอาย แต่ฉันใช้เวลาสักพักก่อนที่ฉันจะรู้ตัวว่าลืมทำอย่างนั้น

นี่คือสิ่งที่เกิดขึ้น:

เพิ่มแอปใหม่จากนั้นเพิ่มโมเดลขั้นต่ำจากนั้นพยายามนำเข้าโมเดลในคอนโซล Python / Django (PyCharm pro 2019.2) นี้ยกความผิดพลาดเพราะผมไม่ได้เพิ่มแอปใหม่เพื่อdoesn't declare an explicit app_label INSTALLED_APPSดังนั้นฉันจึงเพิ่มแอปให้INSTALLED_APPSในลองนำเข้าอีกครั้ง แต่ก็ยังได้รับข้อผิดพลาดเหมือนเดิม

มาที่นี่อ่านคำตอบอื่น ๆ ทั้งหมด แต่ดูเหมือนจะไม่มีอะไรพอดี

ในที่สุดฉันก็โดนว่าฉันยังไม่ได้รีสตาร์ทคอนโซล Python หลังจากเพิ่มแอพใหม่ลงในINSTALLED_APPS.

หมายเหตุ: ความล้มเหลวในการรีสตาร์ทคอนโซล PyCharm Python หลังจากเพิ่มวัตถุใหม่ลงในโมดูลก็เป็นวิธีที่ดีในการทำให้เกิดความสับสน ImportError: Cannot import name ...


ขอบคุณสำหรับคำตอบนี้ฉันลืมแหล่งที่มาของ.envไฟล์และฉันพยายามอย่างเต็มที่เพื่อให้สิ่งต่างๆทำงานได้ดีกับการกำหนดค่าที่ล้าสมัย: /
sodimel

1

O ... M ... G ฉันได้รับข้อผิดพลาดนี้เช่นกันและฉันใช้เวลาเกือบ 2 วันและตอนนี้ฉันก็สามารถแก้ไขได้ในที่สุด สุจริต ... ข้อผิดพลาดไม่เกี่ยวข้องกับปัญหาคืออะไร ในกรณีของฉันมันเป็นเรื่องธรรมดาของไวยากรณ์ ฉันพยายามเรียกใช้โมดูล python แบบสแตนด์อโลนที่ใช้โมเดล django ในบริบท django แต่โมดูลนั้นไม่ใช่โมเดล django แต่ฉันกำลังประกาศว่าชั้นเรียนผิด

แทนที่จะมี

class Scrapper:
    name = ""
    main_link= ""
    ...

ฉันกำลังทำ

class Scrapper(Website):
    name = ""
    main_link= ""
    ...

ซึ่งเห็นได้ชัดว่าผิด ข้อความนี้ทำให้เข้าใจผิดมากจนฉันไม่สามารถช่วยตัวเองได้ แต่คิดว่ามันเป็นปัญหาบางอย่างกับการกำหนดค่าหรือเพียงแค่ใช้ django ในทางที่ผิดเนื่องจากฉันยังใหม่มาก

ฉันจะแบ่งปันสิ่งนี้ที่นี่สำหรับคนที่เพิ่งเริ่มต้นเพราะฉันกำลังเผชิญกับความโง่เขลาเดียวกันหวังว่าจะสามารถแก้ปัญหาของพวกเขาได้


0

ฉันได้รับข้อผิดพลาดนี้หลังจากที่ฉันย้ายSECRET_KEYto pull จากตัวแปรสภาพแวดล้อมและลืมตั้งค่าเมื่อเรียกใช้แอปพลิเคชัน หากคุณมีสิ่งนี้ในไฟล์settings.py

SECRET_KEY = os.getenv('SECRET_KEY')

จากนั้นตรวจสอบให้แน่ใจว่าคุณกำลังตั้งค่าตัวแปรสภาพแวดล้อมจริงๆ


0

ส่วนใหญ่อาจคุณมีการนำเข้าขึ้นอยู่กับ

ในกรณีของฉันฉันใช้คลาส serializer เป็นพารามิเตอร์ในโมเดลของฉันและคลาส serializer ใช้โมเดลนี้: serializer_class = AccountSerializer

from ..api.serializers import AccountSerializer

class Account(AbstractBaseUser):
    serializer_class = AccountSerializer
    ...

และในไฟล์ "serializers":

from ..models import Account

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            'id', 'email', 'date_created', 'date_modified',
            'firstname', 'lastname', 'password', 'confirm_password')
    ...

0

วันนี้ฉันได้รับข้อผิดพลาดนี้และมาลงเอยที่นี่หลังจาก googling คำตอบที่มีอยู่ดูเหมือนจะไม่เกี่ยวข้องกับสถานการณ์ของฉัน สิ่งเดียวที่ฉันต้องทำคือการนำเข้าโมเดลจาก__init__.pyไฟล์ของฉันในระดับบนสุดของแอพ ฉันต้องย้ายการนำเข้าของฉันไปยังฟังก์ชันโดยใช้โมเดล

Django ดูเหมือนจะมีโค้ดแปลก ๆ ที่สามารถล้มเหลวเช่นนี้ได้ในหลาย ๆ สถานการณ์!


0

วันนี้ฉันได้รับข้อผิดพลาดนี้ด้วย ข้อความอ้างอิงกับบางแอปที่เฉพาะเจาะจงของปพลิเคชันของฉันในINSTALLED_APPS แต่ในความเป็นจริงมันไม่มีส่วนเกี่ยวข้องกับแอพนี้เลย ฉันใช้สภาพแวดล้อมเสมือนใหม่และลืมติดตั้งไลบรารีบางตัวที่ฉันใช้ในโปรเจ็กต์นี้ หลังจากฉันติดตั้งไลบรารีเพิ่มเติมมันก็ใช้งานได้


0

สำหรับผู้ใช้ PyCharm: ฉันพบข้อผิดพลาดในการใช้โครงสร้างโครงการที่ไม่ "สะอาด"

เป็น:

project_root_directory
└── src
    ├── chat
       ├── migrations
       └── templates
    ├── django_channels
    └── templates

ตอนนี้:

project_root_directory
├── chat
   ├── migrations
   └── templates
       └── chat
├── django_channels
└── templates

นี่คือวิธีแก้ปัญหาที่ดีมากมาย แต่ฉันคิดว่าก่อนอื่นคุณควรทำความสะอาดโครงสร้างโครงการของคุณหรือปรับแต่งการตั้งค่า PyCharm Django ก่อนตั้งค่า DJANGO_SETTINGS_MODULEตัวแปรและอื่น ๆ

หวังว่ามันจะช่วยใครสักคน ไชโย


-1

ปัญหาคือ:

  1. คุณได้ทำการแก้ไขไฟล์โมเดลของคุณแล้ว แต่ยังไม่ได้เพิ่มลงในฐานข้อมูล แต่คุณกำลังพยายามเรียกใช้รันเซิร์ฟเวอร์ Python Manage.py

  2. เรียกใช้ Python Manage.py makemigrations

  3. Python Manage.py โยกย้าย

  4. ตอนนี้ Python Manage.py runerver และทุกอย่างน่าจะใช้ได้

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