Подтвердить что ты не робот

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 в целое число. Есть где-то где-то, что мне не хватает? Я смог обойти метод, но на самом деле это не совсем то, что я могу игнорировать и работать на этом этапе. Благодарю! Любой другой код/​​информация предоставляется по запросу. Кроме того, есть много других полей, но я оставил их в интересах краткости.

4b9b3361

Ответ 1

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

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

  • системная установка
  • развернуть расширенный каталог django с вашим кодом, импортировать с помощью относительного пути
  • с помощью virtualenv

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