Django模块对象不可迭代。

3

我目前正在尝试使用Django构建博客。 我已经遇到了这个错误几个小时了。 我不确定这是否与目录有关,但当我尝试在admin.py文件中注册我的模型时出现了错误。

from django.contrib import admin
from .models import Post

# Register models
admin.site.register(Post)

目录如下所示:
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.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。每当我注释register行时,一切正常运作。
1个回答

5

不要写成"from .models import Post",而应该写成"from .models.Post import Post"。

第一个"Post"是模块名(文件名),第二个是类名。


这解决了第一个错误,但又产生了另一个错误 ERRORS: hallak_blog.Post.category: (fields.E300) 字段定义了与模型'.Category'的关系,该模型未安装或为抽象。hallak_blog.Post.category: (fields.E307) 声明字段hallak_blog.Post.category时使用了对'.category'的延迟引用,但应用程序''未安装。 - mrhallak
在Post.py模块中应该导入“Category”模型。您在Post类中使用了名称“Category”,但它没有被定义。从“.Category”导入“Category”。 - MihanEntalpo
你真的不应该把你的模型放在单独的文件中。虽然这样可以工作,但对于新手来说会很困惑。这也是你两个问题的原因。把它们都移回到一个单独的models.py文件中。 - Daniel Roseman
@MihanEntalpo ValueError: 无效的模型引用 'hallak_blog.models.models'。字符串模型引用必须采用'app_label.ModelName'的形式。 我正在使用 from .models import Post - mrhallak
让我们在聊天中继续这个讨论。点击此处进入聊天室 - MihanEntalpo
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接