QuerySelectField работает на одном сервере, разбивается на другой с тем же кодом
Я нахожусь в установке тестовой установки моего текущего проекта Python/Django. Все отлично работает на моем dev-сервере, но недавно мы создали новую виртуальную машину для тестовых и возможных производственных копий проекта. Я использую Python, Django, SqlAlchemy (с бэкэнд MSSQL) и WTForms как мои основные пакеты.
У меня возникла проблема, когда мой тестовый сервер работает неправильно. Я лично не настраивал или не устанавливал эти пакеты на любом сервере (это было сделано кем-то, кто сейчас ушел), поэтому я действительно не знаю всего об этом, но я знаю, что на моем тестовом сервере я был у меня много проблем, которые у меня нет на dev-сервере. Например, Django не правильно разрешал методы, когда я использовал их в шаблонах (он возвращал бы "связанный метод UserForm.action... и т.д. Вместо возвращаемого значения), и теперь он, кажется, приписывает ряд вещей в целые числа, когда они никогда не объявляются таковыми. Версии 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):
#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 используется строка 3character в качестве столбца идентификатора), но где-то вдоль линии это вызывает проблему. Форма указывает на обработчик, который делает:
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
Это похоже на проблему с развертыванием.
Существует три способа развертывания django:
- системная установка
- развернуть расширенный каталог django с вашим кодом, импортировать с помощью относительного пути
- с помощью virtualenv
Моим подходом было бы выбрать один из этих вариантов (возможно, 2 или 3, также в зависимости от того, как вы устанавливаете другие зависимости, такие как SqlAlchemy); затем проверьте, нет ли конфликтов с другими развертываниями.