문제

나는 공식적인 것에 대해 상당히 초보자이며 내가 무언가를 얻지 못하는 것 같습니다. 다음과 같이 정의 된 sqlalchemy 모델이 있습니다.

...
class Device(meta.Base):
    __tablename__ = 'devices'

    id = sa.Column('id_device', sa.types.Integer, primary_key=True)
    serial_number = sa.Column('sn', sa.types.Unicode(length=20), nullable=False)
    mac = sa.Column('mac', sa.types.Unicode(length=12), nullable=False)
    ipv4 = sa.Column('ip', sa.types.Unicode(length=15), nullable=False)
    type_id = sa.Column('type_id', sa.types.Integer,
                        sa.schema.ForeignKey('device_types.id'))
    type = orm.relation(DeviceType, primaryjoin=type_id == DeviceType.id)
...

그런 다음 (Pylons) 컨트롤러에서 다음과 같은 공식 체형 형태를 만듭니다.

c.device = model.meta.Session.query(model.Device).get(device_id)
fs = FieldSet(c.device, data=request.POST or None)
fs.configure(options=[fs.ipv4.label(u'IP').readonly(),
                      fs.type.label(u'Type').with_null_as((u'—', '')),
                      fs.serial_number.label(u'S/N'),
                      fs.mac.label(u'MAC')])

문서에 따르면 "기본적으로 Null 열이 필요하지 않습니다. 제거하지 않고 필요한 것만 추가 할 수 있습니다." validators.required 불만. 같은 것이 있습니까? blank=True, null=False 장고에서?

더 정확하게 말하면, 나는 아래와 같은 맞춤형 유효성 검사기를 원합니다. type=None 또는 무감각하고 비어 있지 않은 모든 값 :

# For use on fs.mac and fs.serial_number.
# I haven't tested this code yet.
def required_when_type_is_set(value, field):
    type_is_set = field.parent.type.value is not None:
    if value is None or (type_is_set and value.strip() = ''):
        raise validators.ValidationError(u'Please enter a value')

가능하면 원숭이 패치를 삼가고 싶습니다 formalchemy.validators.required 또는 다른 kludges. 나는 설정하고 싶지 않다 nullable=True 모델 필드에서는 적절한 솔루션이 아닌 것 같습니다.

그러한 경우 양식을 검증하는 올바른 방법은 무엇입니까? 제안에 미리 감사드립니다.

도움이 되었습니까?

해결책

마침내 (Klugde, 그러나 이것이 유일한 제정신 선택 인 것 같습니다)이 작업을 수행하는 방법을 찾았습니다.

  fs.serial_number.validators.remove(formalchemy.validators.required)
  fs.mac.validators.remove(formalchemy.validators.required)

(내 유효성 검사기와 관련하여) 참고, FA는 완전히 값이있을 때 모든 유효성 검사를 건너 뛰십시오 None, 컨벤션에 의해 통과되지 않기 때문입니다 None 유효성 검사기 (제외) validators.required, 하드 코딩). 나는 이것을 해결하려는 강화 요청 티켓을 제출했다. http://code.google.com/p/formalchemy/issues/detail?id=117

다른 팁

이유를 설명해 주시겠습니까? nullable=True 해결책이 아닌가?

나에게는 빈 줄을 데이터베이스에 저장하는 것이 쓸모없는 것 같습니다. 나는 그것을 격려하지 않을 것입니다. 데이터베이스의보다 효율적인 유형을 선택하는 것보다 데이터가없는 경우.

개인적으로 나는 문자열의 경우 Django 솔루션이 charfields에서 실제로 null을 지원하지 않기 때문에 잘못되었다고 생각합니다. charfield에 null을 저장하려면 코드에서 수동으로 수행해야합니다.

이것은 내가 가지고있는 것과 똑같은 문제입니다. 여기서 기존 데이터베이스에 대한 인터페이스를 종종 작성하고 공식을 사용하고 싶지만 데이터베이스를 변경할 수 없으므로 '필수성'을 수동으로 제거해야합니다.

공식 체포를 가르 칠 수 있습니다. null_as 열 속성.

 whatever = Column(Unicode(999), required=False, null_as=("","\0"), nullable=False, default="", doc="Whatever for ever")

Farmalchemy는 두 번째 구성원과 동일한 입력을 대체합니다. null_as 튜플 None. (첫 번째는 Selects 및 유사한 필드의 디스플레이 텍스트입니다.)

문자열로 설정하면 사용자가 입력 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top