Django Admin停止工作 - 'module'对象不可迭代

时间:2012-12-10 08:09:45

标签: django admin

我开始使用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

感谢您的帮助!

2 个答案:

答案 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?尝试明确导入Branchfrom models import Branch并查看是否失败。

应用程序名称:如果您的应用程序真的被称为“模型”,相对导入from models import *可能会让您获得顶级“模型”模块,而不是您所说的“model.models”。错误的输入。

答案 1 :(得分:0)

这是你的

from models import *

应该是

from appName.models import className