QuerySelectField работает на одном сервере, разбивается на другом с тем же кодом - PullRequest
10 голосов
/ 13 сентября 2010

Я в процессе установки тестовой установки моего текущего проекта Python / Django. Все отлично работает на моем dev-сервере, но недавно мы создали новую виртуальную машину для тестовых и возможных рабочих копий проекта. В качестве основных пакетов я использую Python, Django, SqlAlchemy (с бэкэндом MSSQL) и WTForms.

У меня проблема с тем, что мой тестовый сервер работает неправильно. Я лично не устанавливал и не устанавливал эти пакеты ни на одном из серверов (это было сделано кем-то, кто уже ушел), поэтому я не знаю всего обо всем этом, но я знаю, что на моем тестовом сервере я был У меня много проблем, которых у меня нет на сервере dev. Например, Django не разрешал методы должным образом, когда я использовал их в шаблонах (вместо возвращаемого значения он возвращал «связанный метод UserForm.action of ... и т. Д.»), И теперь он, кажется, вводит несколько типов в целые числа, когда они никогда не объявляются таковыми. Версии 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

Итак, я выбираю организацию из поля выбора, которое публикует OrgID = Z55 (поскольку таблица OrgID использует строку из 3 символов в качестве столбца идентификатора), но где-то вдоль строки это вызывает проблему. Форма указывает на обработчик, который делает:

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 Ответ

1 голос
/ 08 февраля 2012

Это похоже на проблему развертывания.

Существует три основных способа развертывания django:

  1. общесистемная установка
  2. разверните расширенный каталог django с вашим кодом, импортируйте с использованием относительного пути
  3. с использованием virtualenv

Мой подход заключается в выборе одного из этих параметров (возможно, 2 или 3, также в зависимости от того, как вы устанавливаете другие зависимости, такие как SqlAlchemy); затем проверьте, нет ли конфликтов с другими развертываниями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...