저는 FormAlchemy를 초보자로 생각하며 뭔가를 얻지 못하는 것 같습니다.FormAlchemy에서 NULL이 아닌 필드 (빈 문자열 허용)를 요구하지 마십시오
이...
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)
...
그런 다음 내 (철탑) 컨트롤러에서 나는이 같은 FormAlchemy 양식을 작성 :
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 NOT 열이 있다고 나는 다음과 같이 정의 된 SQLAlchemy의 모델이 필수 항목 만 추가 할 수 있고 제거 할 수는 없습니다. "하지만 NULL이 아닌 빈 문자열을 허용하고 싶습니다. validators.required
은 허용하지 않습니다. Django에 blank=True, null=False
과 같은 것이 있습니까? 나는
# 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')
가능한 경우 :
더 정확히 말하면, 나는 비어 있지 않은 비 NULL 및 설정 아래 하나, 같은 사용자 정의 유효성 검사기가 비어type=None
와 문자열이나 모든 값을 허용하거나 원하는 원숭이 패치
formalchemy.validators.required
또는 기타 kludges를 삼가고 싶습니다. 모델 필드에
nullable=True
을 설정하고 싶지 않습니다. 적절한 해결 방법도 아닌 것 같습니다.
그런 경우 양식을 확인하는 올바른 방법은 무엇입니까? 미리 제안 해 주셔서 감사합니다.
제안 해 주셔서 감사합니다. 아마도 맞을 수도 있습니다.이 문제에 대해 다른 의견이 있습니다. http://stackoverflow.com/questions/265875/default-string-initialization-null-or-empty. 어쨌든, 그 대답은 간단하고 그리 운 좋지는 않습니다 - 그것은 이미 기존 ("유산") 데이터베이스 지원입니다. 이미 그 DB를 사용하는 코드가 이미 많이 있으며, "값 없음"을위한 빈 문자열을 저장하고 NULL을 피하는 것이 관행입니다. – drdaeman