Ich versuche derzeit, einen Blog mit Django zu bauen. Ich habe diesen Fehler nun seit ein paar Stunden erlebt. Ich bin mir nicht ganz sicher, ob das etwas mit den Verzeichnissen zu tun hat, aber der Fehler tritt auf, wenn ich versuche, mein Modell in der Datei admin.py zu registrieren.Django-Modul-Objekt ist nicht iterierbar
from django.contrib import admin
from .models import Post
# Register models
admin.site.register(Post)
die Verzeichnisse wie folgt aussehen:
blog
models
Post
Category
admin.py
settings
static
templates
Trace:
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
Beitrag:
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
Kategorie:
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)
Der Fehler passiert hier: https://github.com/django/django/blob/master/django/contrib/admin/sites.py#L100-L101
Immer, wenn ich die Registerlinie alles funktioniert kommentieren.
Dies löste den ersten Fehler erzeugt aber noch einen 'Errors: hallak_blog.Post.category: (fields.E300) Feld definiert eine Beziehung mit dem Modell‚.Category‘, die entweder nicht installiert ist, oder abstrakt ist. hallak_blog.Post.category: (fields.E307) Das Feld hallak_blog.Post.category wurde mit einem verzögerten Verweis auf '.category' deklariert, aber die App '' ist nicht installiert. ' – hallaksec
Modell "Category" sollte importiert werden das Post.py-Modul. Sie verwenden den Namen "Category" in der Post-Klasse, aber es ist nicht definiert. von ".Category" Import "Kategorie". – MihanEntalpo
Sie sollten Ihre Modelle wirklich nicht in separaten Dateien ablegen. Obwohl das funktioniert, ist es verwirrend für jemanden, der neu bei Python und Django ist. Es ist auch die Ursache für beide Probleme. Verschiebe sie beide zurück in ein einziges models.py. –