发布
社区首页 >问答首页 >“模块”对象在服务器运行时不可调用,但在django控制台中可以调用

“模块”对象在服务器运行时不可调用,但在django控制台中可以调用
EN

Stack Overflow用户
提问于 2012-02-16 08:40:19
回答 2查看 493关注 0票数 1

奇怪的是,它以前起过作用,现在却没有:

获取以下错误:

代码语言:javascript
代码运行次数:0
复制
Exception Value:    
'module' object is not callable
Exception Location: C:\work\Portman\core\models\pmo_review_task.py in save, line 38

如果我将“从core.models导入sc_review_task”更改为“从core.models导入*”,则错误消息将更改为“未定义全局名称sc_review_task”。

如果我运行django管理和do:从core.models导入sc_review_task a= sc_review_task()

一切看起来都没问题-没有错误信息。

请帮我弄清楚这件事,我正在脱发

pmo_review_task (第38行是"newtask = sc_review_task()"):

代码语言:javascript
代码运行次数:0
复制
# -*- coding: utf-8 -*-
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
from core.models import sc_review_task

class pmo_review_task(models.Model):
    project_phase_to_review = models.ForeignKey('project_phase')
    creation_date = models.DateTimeField(default=datetime.now())
    is_closed = models.BooleanField(default=False,null=False)
    review_date = models.DateTimeField(null=True,blank=True)
    review_comment = models.TextField(null=True, blank=True)
    reviewed_by = models.ForeignKey(User, null=True, blank=True)
    is_review_result_ok = models.NullBooleanField(null=True)
    scheduled_sc = models.ForeignKey('sc_event', null=True, blank=True)
    review_goal = models.ForeignKey('phases')

    def __unicode__(self):
        return self.project_phase_to_review.project.name

    def save(self, *args, **kwargs):

        if self.is_closed and self.is_review_result_ok and self.scheduled_sc is None:
            raise models.ImproperlyConfigured

        if self.is_closed and self.is_review_result_ok is False:
            self.project_phase_to_review.is_finished = False
            self.project_phase_to_review.is_approved_for_sc = False
            self.project_phase_to_review.save()

        if self.is_closed and self.is_review_result_ok and self.scheduled_sc:
            if self.scheduled_sc.has_taken_place is True:
                raise Exception("Cannot assign a task to a SC event that has taken place")
            #update reviewed project to indicate it has been saved
            self.project_phase_to_review.is_approved_for_sc = True
            self.project_phase_to_review.save()
            #create sc_review_talk
            newtask = sc_review_task()
            newtask.project_phase_to_review = self.project_phase_to_review
            newtask.sc_event_to_review_at = self.scheduled_sc
            newtask.review_goal = self.review_goal
            newtask.is_closed = False
            newtask.save()
            #call real save operation
        super(pmo_review_task,self).save(*args, **kwargs)

    class Meta:
        app_label = 'core'

sc_review_task:

代码语言:javascript
代码运行次数:0
复制
# -*- coding: utf-8 -*-
from django.db import models
from core.models import project_phase

class sc_review_task(models.Model):
    sc_event_to_review_at = models.ForeignKey('sc_event', null=False)
    project_phase_to_review = models.ForeignKey('project_phase', null=False)
    review_goal = models.ForeignKey('phases',related_name="target_review_goal")
    is_closed = models.BooleanField(default=False)
    review_decision_phase = models.ForeignKey('phases', null=True, blank=True,related_name="sc_decided_phase")
    review_decision_comment = models.TextField(null=True, blank=True)

    def __unicode__(self):
        return self.project_phase_to_review.project

    def save(self, *args, **kwargs):
        super(sc_review_task,self).save(*args, **kwargs)
        if self.is_closed and self.project_phase_to_review.phase == self.review_decision_phase:
            self.project_phase_to_review.is_approved_for_sc = False
            self.project_phase_to_review.is_finished = False
            self.project_phase_to_review.is_closed = False
            self.project_phase_to_review.save()
        elif self.is_closed:
            self.project_phase_to_review.is_closed = True
            self.project_phase_to_review.save()
            new_phase = project_phase()
            new_phase.project = self.project_phase_to_review.project
            new_phase.phase = self.review_decision_phase
            new_phase.save()

    class Meta:
        app_label = 'core'

每个类都位于/model/中自己的文件中,下面是init.py:

代码语言:javascript
代码运行次数:0
复制
from divisions import divisions
from django.db import models
from groups import groups
from phases import phases
from pmo_review_task import pmo_review_task
from priorities import priorities
from progress_indicator import progress_indicator
from project import project
from project_imported_from_excel import project_imported_from_excel
from project_phase import project_phase
from project_phase_history import project_phase_history
from project_status_submit_form import project_status_submit_form
from roles import roles
from sc_event import sc_event
from sc_review_task import sc_review_task
from milestone import milestone
from milestone import milestone_history


__all__ = ['divisions',
           'groups',
           'phases',
           'pmo_review_task',
           'priorities',
           'progress_indicator',
           'project',
           'project_imported_from_excel',
           'project_phase',
           'project_phase_history',
           'project_status_submit_form',
           'roles',
           'sc_event',
           'sc_review_task',
           'milestone',
           'milestone_history']
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 08:48:26

检查你的名字空间..。

在pmo_review_task (第38行是"newtask = sc_review_task()")中,应该是newtask=sc_review_task.sc_review_task()

票数 1
EN

Stack Overflow用户

发布于 2012-02-16 08:49:28

看起来,错误是您试图执行sc_review_task而不是sc_review_task.sc_review_task

为了防止这种错误,我认为应该用小写字母命名模块,用大写字母命名类,即模块应该是sc_review_task和类ScReviewTask

欲了解更多信息,请访问PEP 8

包和模块名称 模块应该有短的、全小写的名称.如果提高了可读性,可以在模块名中使用下划线。Python包也应该有短的、全小写的名称,尽管不鼓励使用下划线。 ..。 类名 几乎无一例外,类名使用CapWords约定。用于内部使用的类还有一个前导下划线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9307962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档