Python QuerySelectField在一台服务器上工作,在另一台服务器上使用相同的代码中断

Python QuerySelectField在一台服务器上工作,在另一台服务器上使用相同的代码中断,python,django,sqlalchemy,Python,Django,Sqlalchemy,我正在为我当前的Python/Django项目设置一个测试安装。在我的dev服务器上一切都很好,但是我们最近为测试和项目的最终生产拷贝设置了一个新的VM。我使用Python、Django、SqlAlchemy(带有MSSQL后端)和WTForms作为主要包 我遇到了一个问题,测试服务器运行不正常。我没有亲自在任何一台服务器上设置或安装这些软件包(这是由现在离开的人完成的),因此我并不完全了解这些软件包的所有内容,但我确实知道,在我的测试服务器上,我遇到了很多开发服务器上没有的问题。例如,当我在模

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

我遇到了一个问题,测试服务器运行不正常。我没有亲自在任何一台服务器上设置或安装这些软件包(这是由现在离开的人完成的),因此我并不完全了解这些软件包的所有内容,但我确实知道,在我的测试服务器上,我遇到了很多开发服务器上没有的问题。例如,当我在模板中使用方法时,Django没有正确地解析方法(它将返回'bind method UserForm.action of…etc',而不是返回值),现在它似乎正在将一些东西类型化为整数,而它们从未声明为整数。python、django、wtforms和sqlalchemy的版本在所有服务器上都是相同的。下面是在dev服务器上正常工作,但在测试服务器上中断的示例代码(以及错误消息):

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表格定义):

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表使用一个3character字符串作为ID列),但这会在某个地方引起问题。表单指向一个处理程序,该处理程序执行以下操作:

服务.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转换为整数。有没有我错过的场景?我能够解决方法问题,但这并不是我现在可以忽略和解决的问题。谢谢可根据要求提供任何其他代码/信息。此外,还有许多其他字段,但为了简洁起见,我省略了这些字段。

这似乎是一个部署问题

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

  • 全系统安装
  • 使用代码部署扩展的django目录,使用相对路径导入
  • 使用virtualenv

  • 我的方法是选择其中一个选项(可能是2或3,也取决于您如何安装其他依赖项,如SqlAlchemy);然后检查是否与其他部署没有冲突。

    Django到底在哪里发挥作用?如果您使用的是SQLalchemy和WTForms,那么使用Django似乎不值得:)我认为如果您删除Django,可以消除很多问题(因为像@AndreBossard一样,我看不到它在哪里被使用)并且使用一些轻量级的东西,比如Flask,它支持WTForms和SQLAlchemy。它将回答谁试图将
    OrgID
    转换为整数。另外,在开发服务器和测试服务器上指定WTForms的版本也很有用(我看到您使用的
    pk\u attr
    参数已被弃用,甚至可能在最新版本中不起作用)。
    invalid literal for int() with base 10: 'Z55'