2014-01-22 3 views
1

Я использую плагин формы деформации с пирамидой.Деформация по умолчанию не работает должным образом с классом

Я первый из, у меня модель:

class Manufacturer(Base): 
    __tablename__ = 'manufacturers' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode, nullable=False, unique=True) 
    image_id = Column(Integer, ForeignKey('images.id')) 
    product = relationship('Product', backref='manufacturer') 

    @classmethod 
    def _choices(cls): 
     choices_query = DBSession.query(cls).\ 
     order_by(asc(Manufacturer.name)).all() 
     return [(ch.id, ch.name) for ch in choices_query] 

Теперь на мой взгляд, у меня есть код деформироваться, это работает отлично для добавления новых записей.

class EditMattingSchema(colander.MappingSchema): 
    name = colander.SchemaNode(colander.String(), 
      default=product.name) 

    manufacturer = colander.SchemaNode(colander.String(), 
     widget = widget.SelectWidget(values=Manufacturer._choices())) 

Теперь это создает мой html правильно, и поле выбора отлично отображается.

Однако, когда я использую опцию по умолчанию, например:

product = Session.query(Product).\ 
    filter(Product.slug == 'foo').first() 

default_id = product.manufacturer_id 
print default_id 
1 

manufacturer = colander.SchemaNode(colander.String(), 
    default = default_id 
    widget = widget.SelectWidget(values=Manufacturer._choices())) 

HTML-визуализации не добавляет

selected="selected" 

К моему поле ввода по умолчанию (или любой вариант, даже если Я его жестко кодирую, заменив имя переменной на значение, которое должно быть выбрано по умолчанию).

ответ

1

я должен был обновить свой метод класса для возврата целочисленных значений в виде строк, даже если это не требуется, если я определяю выбор вручную, как показано в деформируются демо:

@classmethod 
    def _choices(cls): 
     choices_query = DBSession.query(cls).\ 
     order_by(asc(Manufacturer.name)).all() 
     return [(str(ch.id), ch.name) for ch in choices_query] 
Смежные вопросы