我正在设置当前Python/Django项目的测试安装过程。在我的开发服务器上一切都很好,但我们最近为测试和项目的最终生产副本设置了一个新的虚拟机。我使用Python,Django,SqlAlchemy(带有MSSQL后端)和WTForms作为我的主包。QuerySelectField在一台服务器上工作,在另一台服务器上打破,使用相同的代码
我遇到问题,我的测试服务器运行不正常。我没有亲自在这两个服务器上设置或安装这些软件包(这是由一个现在已经离开的人完成的),所以我并不真正了解这一切,但我确实知道在我的测试服务器上,我已经我在开发服务器上没有很多问题。例如,当我在模板中使用它们时,Django没有正确地解析方法(它会返回'...方法的UserForm.action',而不是返回值),现在它似乎将类型转换为当它们从未被声明时是整数。 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
所以,我从选择领域的组织,WH因为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转换为整数。有什么地方有我失踪的设置吗?我能够解决方法问题,但在这一点上我不能忽略和解决这个问题。谢谢!任何其他代码/信息可根据要求提供。此外,还有许多其他领域,但为了简洁起见,我将这些领域排除在外。
Django究竟在哪里发挥作用? – 2010-09-14 12:17:07
如果你正在使用SQLalchemy和WTForms,它似乎不值得使用Django :) – Anentropic 2011-10-26 12:37:38
我想你可以消除很多问题,如果你删除django(因为像@AndreBossard我看不到它在哪里使用)并使用轻量级的东西 - 像支持WTForms和SQLAlchemy的Flask。 – 2011-12-19 04:29:26