1

我开始使用 Django。我无法让管理员工作(它曾经工作过,我不确定是什么更新让它崩溃了......)。

一旦我在管理员中注册模型,网站就会在任何 URL 上崩溃并出现此错误:

'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)

模型.py:

import Page, Promotion, Branch, Contact

分支.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

感谢您的帮助 !

4

2 回答 2

3

您的代码中有几处不是很整洁。其中之一可能会导致您看到的错误,尽管我不知道是哪一个。

  • 您使用相对导入 ( from models import ...)。做一个像from yourapp.models import ...) 这样的绝对导入会更健壮。

  • 您使用“星形导入”:from models import *。您并不真正知道要在执行此操作的文件中准确导入什么。自动代码检查器(如pyflakes)也无法检查您是否缺少导入。

  • 你提到models.yml的文件名。这不是一个.py扩展,所以 python 不会对那个做任何事情。

  • Meta您在模型中设置的应用名称是model. 请注意,“模型”和“模型”是 django 内部的名称。因此,使用带有“models.py”的名为“model”的应用程序很容易出错。为什么没有应用程序yourapp或类似的东西?

以下是一些可能出错的方法:

明星进口:也许你进口了不同adminmodels.py?哪个通过星号导入覆盖 admin.py 中的那个?

The models.yml: 如果这真的是名字,from models import *返回什么?与一个不存在的models.py? 尝试Branch显式导入:from models import Branch看看是否失败。

应用程序名称:如果您的应用程序真的被称为“模型”,则相对导入from models import *可能会为您提供顶级“模型”模块,而不是您的意思的“model.models”,以防您输入错误。

于 2012-12-10T08:24:05.613 回答
0

是你的

from models import *

它应该是

from appName.models import className
于 2012-12-10T08:25:54.653 回答