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

Jim*_*thy 10 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/'
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

因此,我从选择字段中选择一个组织,该组织发布'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)
Run Code Online (Sandbox Code Playgroud)

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

invalid literal for int() with base 10: 'Z55'
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*jer 1

这似乎是一个部署问题。

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

  1. 系统范围安装
  2. 使用您的代码部署扩展的 django 目录,使用相对路径导入
  3. 使用虚拟环境

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