我正在設置當前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