Django 1.7 ném django.core.exceptions.AppRegistryNotReady: Các mô hình chưa được tải


166

Đây là truy nguyên trên hệ thống cửa sổ của tôi.

Traceback (most recent call last):
  File "D:\AMD\workspace\steelrumors\manage.py", line 9, in <module>
    django.setup()
  File "D:\AMD\Django\django-django-4c85a0d\django\__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\registration\models.py", line 15, in <module>
    User = get_user_model()
  File "D:\AMD\Django\django-django-4c85a0d\django\contrib\auth\__init__.py", line 135, in get_user_model
    return django_apps.get_model(settings.AUTH_USER_MODEL)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 199, in get_model
    self.check_models_ready()
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

Và quản lý của tôi trông như thế này:

import os
import sys
import django

if __name__ == "__main__":

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "steelrumors.settings")
    django.setup()
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Tôi gặp lỗi này khi tôi đang cố gắng sử dụng ứng dụng đăng ký trong Django 1.7


1
Bạn có một thư mục được gọi django-django-4c85a0d; 4c85a0dtình cờ là một hàm băm Django (không ổn định). Tôi không tin rằng bạn thực sự đang sử dụng Django 1.7 (cf câu trả lời của tôi)
Kristian Glass

Bạn đã bao giờ giải quyết vấn đề của bạn?
Nick Spacek

Điều này cũng có thể liên quan đến venv. Tái tạo thư mục venv đã sửa nó cho tôi. `` `Mv venv venv_old virtualenv venv nguồn ./venv/bin/activate pip cài đặt requirements.txt -r` ``
Thomas - BeeDesk

1
Tôi cũng gặp một số lỗi như thế này khi tôi thêm LOGGING trong settings.py trên máy mac của mình, điều này là do tôi tạo một tệp nhật ký trên /var/log/xx/debug.log và không có quyền, vì vậy tôi sử dụng sudo để máy chủ, và mọi thứ đều ổn. Xin hãy giúp đỡ một số người đồng tính
gkiwi

Tôi thấy lỗi này khi chạy docker-compose exec .... Vấn đề là tôi đã không chuyển các biến môi trường cần thiết cho lệnh thực thi lệnh docker-compose .
Matthew Hegarty

Câu trả lời:


59

Đây là những gì đã giải quyết nó cho chúng tôi và những người này :

Dự án của chúng tôi bắt đầu với Django 1.4, chúng tôi đã lên 1.5 và sau đó là 1.7. Wsgi.py của chúng tôi trông như thế này:

import os

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

Khi tôi cập nhật lên trình xử lý WSGI kiểu 1.7:

import os

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

Tất cả mọi thứ hoạt động bây giờ.


1
Tôi không đồng ý với bản chỉnh sửa từ @wim, không phải vì tôi nghĩ rằng chúng tôi nên bỏ việc nhập không cần thiết, mà vì tôi đã đưa ra một ví dụ về giao diện wsgi.py được tạo tự động trước đó và trông giống như sau khi tôi đã sao chép sự khác biệt so với 1.7 được tạo tự động wsgi.py.
Nick Spacek

1
Các wsgi.pytập tin tự động không bao giờ có một import systrong đó. Không phải trong 1.4, không phải trong 1.5, và không phải trong 1.7. Nếu bạn có nó trong đó, nó đã được ai đó thêm vào một cách thủ công - nó không được thêm vào bởi djpro-admin startproject.
wim

Tốt để biết, sai lầm của tôi (và bộ nhớ kém). Đã được một thời gian kể từ khi tôi thực hiện điều này nhưng tôi khá chắc chắn rằng tại thời điểm đó tôi đang cố gắng ghi lại hành vi được xây dựng.
Nick Spacek

236

Chạy các lệnh này đã giải quyết vấn đề của tôi (tín dụng cho câu trả lời này ):

import django
django.setup()

Tuy nhiên tôi không chắc tại sao tôi cần cái này. Bình luận sẽ được đánh giá cao.


12
Xin lỗi, chỉ cần nhại lại những gì tôi đã đọc trên django 1.7 phát hành ghi chú về việc phá vỡ các thay đổi. docs.djangoproject.com/en/dev/release/1.7/ . Về cơ bản, Django có một cách mới để tải ứng dụng đã cài đặt. Nếu bạn tải Django từ tập lệnh Python (như tôi đã ở trong các bài kiểm tra đơn vị tùy chỉnh của mình), một số khởi tạo cần phải được thực hiện trước khi tiếp tục và gọi thiết lập () là cách thực hiện. Bên cạnh đó, danh tiếng cho nhóm, bản nâng cấp 1.6.2 lên 1.7.1 của tôi dường như là một công việc thực sự đáng giá trong một giờ.
JL Peyret

12
Tôi chạy lệnh trên ở đâu? Tôi thêm nó vào một tập tin .py hay gì?
KhoPhi

1
Bạn nên chạy cái này trong cùng bối cảnh xảy ra lỗi
Nimo

3
điều này có đủ sự ủng hộ để công đức được đánh dấu câu trả lời đúng
acid_crucifix

Điều này cũng giải quyết một vấn đề tôi gặp phải trong một kịch bản cập nhật dòng lệnh đã bị hỏng khi chuyển sang 1.7.
Jason Champion

58

Vấn đề là trong ứng dụng đăng ký của bạn. Có vẻ như cuộc gọi django đăng ký get_user_module()tại models.pyở mức mô-đun (khi mô hình vẫn đang được nạp bởi quá trình đăng ký ứng dụng). Điều này sẽ không còn hoạt động:

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User    

Tôi muốn thay đổi tập tin mô hình này để chỉ gọi get_user_model() các phương thức bên trong (chứ không phải ở cấp mô-đun) và trong FK sử dụng một cái gì đó như:

user = ForeignKey(settings.AUTH_USER_MODEL)

BTW, cuộc gọi django.setup()không nên được yêu cầu trong manage.pytệp của bạn , nó được gọi cho bạn trong execute_from_command_line. ( nguồn )


đặt nó bên trong if __name__ == '__main__':hoạt động cho tôi nhưng tôi không biết nếu đó là một giải pháp tốt.
Umair A.

@Neutralizer Không chắc bạn làm điều đó như thế nào, nhưng điều đó không nên hoạt động vì django đang nhập mô-đun này. Có lẽ bạn đang tránh dep vòng tròn bằng cách không nhập mô hình Người dùng.
gonz

1
Tôi có nghĩa là đặt những dòng trong kiểm tra tên. Nó có thể bỏ qua việc thực hiện. Tôi chưa thực hiện đủ các bài kiểm tra.
Umair A.

18

Chỉ gặp phải vấn đề tương tự. Vấn đề là do django-registrationkhông tương thích với mô hình người dùng django 1.7.

Một sửa chữa đơn giản là thay đổi các dòng mã này, tại django-registrationmô-đun đã cài đặt của bạn ::

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User  

đến::

from django.conf import settings
try:
    from django.contrib.auth import get_user_model
    User = settings.AUTH_USER_MODEL
except ImportError:
    from django.contrib.auth.models import User 

Của tôi là tại .venv/local/lib/python2.7/site-packages/registration/models.py(virtualenv)


7
Bạn có thể sử dụng django-đăng ký-redux thay thế. Nó được cập nhật và bảo trì ngã ba: github.com/macropin/django-registration
TJL 2/2/2015

1
django-registration-reduxđã khắc phục sự cố cho tôi (tôi có cùng ngăn xếp với OP)
Pierre de LESPINAY 28/03/2015

1
Trong trường hợp bất cứ ai đang vật lộn với điều này trên Django 1.8, nó cũng được áp dụng ở đó.
Andrew Schuster

14

Điều này làm việc cho tôi cho Django 1.9. Kịch bản Python để thực thi là trong thư mục gốc của dự án Django.

    import django 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_NAME.settings")
    django.setup()
    from APP_NAME.models import *

Đặt PRO DỰ_NAME và APP_NAME cho bạn


1
Nó làm việc cho tôi. nhưng tôi không biết tại sao chúng ta nên chạy mã này vì chúng ta đã đề cập đến những mã này trong tệp wsgi của mình.
Mr Code

5

Một tùy chọn khác là bạn có một mục trùng lặp trong INSTALLED_APPS. Điều đó đã gây ra lỗi này cho hai ứng dụng khác nhau mà tôi đã thử nghiệm. Rõ ràng đó không phải là thứ mà Django kiểm tra, nhưng sau đó ai đủ ngớ ngẩn để đưa cùng một ứng dụng vào danh sách hai lần. Tôi, đó là ai.


2

Bạn có môi trường ảo Python mà bạn cần phải nhập trước khi chạy Manage.py không?

Tôi đã gặp phải lỗi này và đó là vấn đề.


2

Tôi gặp vấn đề này khi tôi sử dụng djangocms và thêm một plugin (trong trường hợp của tôi: djangocms-cascade). Tất nhiên tôi phải thêm plugin vào INSTALLED_APPS. Nhưng thứ tự ở đây là quan trọng.

Để đặt 'cmsplugin_cascade' trước khi 'cms' giải quyết vấn đề.


1
thứ tự đã có vấn đề:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev


0

./manage.py migrate

Điều này đã giải quyết vấn đề của tôi


Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - Từ đánh giá
George Z.

@GeorgeZ. Có vẻ như là một nỗ lực để trả lời câu hỏi và rõ ràng đã giải quyết được vấn đề khi áp phích này xuất hiện - ngay cả khi bạn nghĩ nó sai hoặc nên được giải thích thêm, một nỗ lực thực sự để trả lời câu hỏi không nên bị xóa khỏi đánh giá
SurePerformance

-1

Bạn manage.pylà "sai"; Tôi không biết bạn lấy nó từ đâu, nhưng đó không phải là 1.7 manage.py- bạn có đang sử dụng một bản dựng trước phát hành thú vị nào đó không?

Đặt lại của bạn manage.pyvề thông thường, như dưới đây và những thứ nên hoạt động:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Tôi có một quản lý như thế này và tôi vẫn gặp vấn đề này
rmosolgo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.