我开始使用Django了。我无法让管理员工作(它曾经工作过,我不确定是什么更新让它破了......)。
只要我在管理员中注册模型,网站就会在任何网址上出现此错误:
'module' object is not iterable
在跟踪中,它恰好出现了错误:
/Library/Python/2.7/site-packages/django/contrib/admin/sites.py in register
for model in model_or_iterable:
admin_class
<class 'django.contrib.admin.options.ModelAdmin'>
options
{}
model_or_iterable
<module 'model.Branch' from '...../farmpower/src/model/Branch.pyc'>
self
<django.contrib.admin.sites.AdminSite object at 0x1098196d0>
我尝试使用不同的模型,在该示例中,使用Branch(admin.py中的代码):
from django.contrib import admin
from models import *
admin.site.register(Branch)
models.py:
import Page, Promotion, Branch, Contact
Branch.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Branch(models.Model):
name = models.CharField
[...]
class Meta:
app_label = "model"
db_table = "cms_branch"
def __unicode__(self):
return self.name
感谢您的帮助!
答案 0 :(得分:3)
您的代码中有一些不太整洁的东西。其中一个可能会导致你看到的错误,虽然我不知道它是哪一个。
您使用相对导入(from models import ...
)。像from yourapp.models import ...
)这样的绝对导入更健壮。
您使用“星标导入”:from models import *
。你真的不知道你在你正在执行此操作的文件中完全导入了什么。此外,自动代码检查程序(如pyflakes)无法检查您是否再次缺少导入。
您提到models.yml
作为文件名。那不是.py
扩展名,所以python不能用那个扩展。
您在模型Meta
上设置的应用名称为model
。请注意,“模型”和“模型”是相当django内部名称。所以有一个名为“model”的应用程序带有“models.py”可能很容易出错。为什么应用程序不是yourapp
或类似的东西?
以下是一些可能出错的方法:
明星导入:您可能在admin
中导入了不同的models.py
?通过星号导入覆盖admin.py中的那个?
models.yml
:如果真的是这个名字,那么from models import *
会返回什么?使用不存在的models.py
?尝试明确导入Branch
:from models import Branch
并查看是否失败。
应用程序名称:如果您的应用程序真的被称为“模型”,相对导入from models import *
可能会让您获得顶级“模型”模块,而不是您所说的“model.models”。错误的输入。
答案 1 :(得分:0)
这是你的
from models import *
应该是
from appName.models import className