2017-12-24 3 views
1

현재 장고를 사용하여 블로그를 작성하려고합니다. 나는 몇 시간 동안이 오류에 직면 해왔다. 이것이 디렉토리와 관련이 있는지는 잘 모르겠지만 admin.py 파일에 내 모델을 등록하려고 할 때 오류가 발생합니다.Django 모듈 객체가 반복 가능하지 않습니다.

blog 
    models 
     Post 
     Category 
    admin.py 
settings 
static 
templates 

추적 :

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7ffb589a67b8> 
Traceback (most recent call last): 
    File "/usr/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper 
    fn(*args, **kwargs) 
    File "/usr/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 112, in inner_run 
    autoreload.raise_last_exception() 
    File "/usr/lib/python3.6/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception 
    raise _exception[1] 
    File "/usr/lib/python3.6/site-packages/django/core/management/__init__.py", line 327, in execute 
    autoreload.check_errors(django.setup)() 
    File "/usr/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper 
    fn(*args, **kwargs) 
    File "/usr/lib/python3.6/site-packages/django/__init__.py", line 24, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/usr/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate 
    app_config.ready() 
    File "/usr/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 23, in ready 
    self.module.autodiscover() 
    File "/usr/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover 
    autodiscover_modules('admin', register_to=site) 
    File "/usr/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules 
    import_module('%s.%s' % (app_config.name, module_to_search)) 
    File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 994, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 971, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 665, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
    File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 
    File "/home/hallak/Projects/hallak.io/hallak_blog/admin.py", line 5, in <module> 
    admin.site.register(Post) 
    File "/usr/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 102, in register 
    for model in model_or_iterable: 
TypeError: 'module' object is not iterable 

포스트를 다음과 같이

from django.contrib import admin 
from .models import Post 

# Register models 
admin.site.register(Post) 

디렉토리

보일

from django.db import models 
from django.utils import timezone 


class Post(models.Model): 
    # Auto-generated ID 
    id = models.AutoField(primary_key=True) 

    # Title 
    title = models.CharField(max_length=100) 

    # Slug 
    slug = models.SlugField(max_length=100) 

    # Content 
    body = models.TextField() 

    # Timestamps 
    created_on = models.DateField(auto_now_add=True) 
    published_on = models.DateTimeField(blank=True, null=True) 

    # Category 
    category = models.ForeignKey('.Category', on_delete=models.DO_NOTHING) 

    # Author 
    author = models.ForeignKey('auth.User', on_delete=models.DO_NOTHING) 

    # Publish post 
    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return self.title 

카테고리 :

from django.db import models 


class Category(models.Model): 
    # Auto-generated ID 
    id = models.AutoField(primary_key=True) 

    # Title 
    title = models.CharField(max_length=100) 

    # Slug 
    slug = models.SlugField(max_length=100) 

    # Timestamps 
    created_on = models.DateField(auto_now_add=True) 

오류는 여기에서 무슨 일이 일어나고 : https://github.com/django/django/blob/master/django/contrib/admin/sites.py#L100-L101

을 내가 레지스터 선 모든 것이 잘 작동 언급 할 때마다.

답변

4

"from .models import Post"를 작성하는 대신 ".models.Post import Post에서 작성"해야합니다.

첫 번째 "게시"는 모듈 이름 (파일 이름)이고 두 번째는 클래스 이름입니다.

+0

첫 번째 오류를 해결했지만 또 다른 오류가 발생합니다. '오류 : hallak_blog.Post.category : (fields.E300) 필드는 'Category'모델과의 관계를 정의합니다.이 모델은 설치되지 않았거나 추상 상태입니다. hallak_blog.Post.category : (fields.E307) hallak_blog.Post.category 필드가 '.category'에 대한 게으른 참조로 선언되었지만 앱 ''이 설치되지 않았습니다. – hallaksec

+0

"Category"모델을 가져와야합니다. Post.py 모듈 Post 클래스에서 "Category"라는 이름을 사용하고 있지만 정의되지 않았습니다. .Category "import"Category "에서 가져옵니다. – MihanEntalpo

+0

정말로 모델을 별도의 파일에 두어서는 안됩니다. 그것이 작동하도록 만들 수도 있지만, Python과 Django에 익숙하지 않은 사람에게는 혼란 스럽습니다. 두 가지 문제의 원인이기도합니다. 그것들을 다시 하나의 models.py로 옮기십시오. –

관련 문제