QuerySelectField在一台服务器上运行,在另一台服务器上使用相同的代码中断

时间:2010-09-13 14:45:59

标签: python django sqlalchemy

我正在设置当前Python / Django项目的测试安装。我的开发服务器上的一切都运行良好,但我们最近为测试和项目的最终生产副本设置了一个新VM。我正在使用Python,Django,SqlAlchemy(带有MSSQL后端)和WTForms作为我的主要包。

我遇到问题,我的测试服务器运行不正常。我没有在任何一台服务器上亲自设置或安装这些软件包(这是由现在已经离开的人完成的),所以我真的不知道所有这一切,但我知道在我的测试服务器上我一直都是我在开发服务器上没有很多问题。例如,当我在模板中使用它们时,Django没有正确解析方法(它将返回'绑定方法UserForm.action of ... etc'而不是返回值),现在它似乎是将一些东西转换为类型当它们从未被宣布为整数时。所有服务器上的python,django,wtforms,sqlalchemy的版本都是相同的。这是在开发服务器上正常工作的示例代码,但在测试服务器上中断(以及错误消息):

forms.py:

class NewPracticeForm(wtforms.Form):
    Name = wtforms.TextField("Practice Name", [wtforms.validators.Required()])
    OrgID = safields.QuerySelectField("Organization", pk_attr='OrgID')
    action = '/Admin/H/newpractice/'

pulsedb.py(sqlalch表定义):

#engine created here, can include that if necessary but its just a standard engine=create_engine() using pymssql
Base = declarative_base()
metadata = Base.metadata

class Practice(Base):
    __tablename__ = 'Practice'
    Name        = Column(String(256) , nullable=False)
    OrgID       = Column(String(30) , ForeignKey('dbo.Orglist.OrgID') , nullable=False)

views.py:

def partNewPractice(request):
    context = Context()
    frm = forms.NewPracticeForm()
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap)
    context['form'] = frm
    #Return the response here using a method which just tacks a couple things on before returning a normal response

所以,我从select字段中选择一个组织,它发布'OrgID = Z55'(因为OrgID表使用3字符串作为ID列),但是沿着这一行的某处导致了问题。表单指向一个处理程序:

services.py

def HandlerAddPractice(request):
    prac = pdb.Practice()
    frm = forms.NewPracticeForm(request.POST, obj=prac)
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap)

这就是它,因为程序会抛出一个错误:

invalid literal for int() with base 10: 'Z55'

我发现这也发生在具有QuerySelectField的类似字段上,它试图将UUID转换为整数由于某种原因。我错过了什么地方?我能够解决方法问题,但这不是我可以忽略的事情,并且在这一点上可以解决。谢谢!可根据要求提供任何其他代码/信息。此外,还有很多其他领域,但为了简洁起见,我把它们排除在外。

1 个答案:

答案 0 :(得分:1)

这似乎是一个部署问题。

基本上有三种部署django的方法:

  1. 系统范围安装
  2. 使用您的代码部署扩展的django目录,使用相对路径导入
  3. 使用virtualenv
  4. 我的方法是选择其中一个选项(可能是2或3,也取决于你如何安装其他依赖项,如SqlAlchemy);然后检查是否与其他部署没有冲突。