2013-06-12 2 views
0

하여 룩업 값 I는 web2py이 같은 모델을 courses 테이블의 모든 과정을 포함하고 있습니다. 예상대로, courses.ID 필드가 아닌 courses.course_name 필드의 내용을 사용하여 표시합니다 (IS_IN_DB 요구 사항에 문자열 형식 표현이 있기 때문에).web2py의 FORM 문자열 필드 대신 ID

그러나이를 수정하려고합니다. 드롭 다운 메뉴를 선택하면 텍스트 필드 만 표시됩니다. 사용자가 코스 이름을 입력 할 수 있기를 기대하고 있으며 양식이 유효한 이름 인 course_name 인 경우 제대로 작동합니다.

할 일 즉 widget=SQLFORM.widgets.string.widget 속성을 auth_user.course_name 필드에 추가했습니다.이 필드는 드롭 다운 대신 텍스트 상자를 올바르게 표시하지만 사용자가 course_name을 입력 할 수 없습니다. 유효한 courses.id이 입력되고 올바른 ID가 아닌 경우 예상되는 오류 메시지가 표시됩니다.

그러나 ID 대신 course_name을 수락하는 방법을 알아낼 수 없습니다. 이론적으로 autocomplete 플러그인 (실제로 작동 함)을 사용할 수 있지만이 목적은 사용자가 유효한 course_name (비밀번호와 비슷 함)을 알고있는 경우에만 양식을 제출할 수 있도록하기위한 것입니다.

이것이 가능합니까?

답변

1

사용자 정의 유효성 검사 클래스 (IS_IN_DB 유효성 검사기 대체)를 사용하여 알아 냈습니다. 참고로,이처럼 내 검증이 모습입니다 : 내가 web2py 설명서에서 검증 클래스의 템플릿을 가지고

class COURSE_NAME_VALIDATOR: 
    def __init__(self, error_message='Unknown course name. Please see your instructor.'): 
     self.e = error_message 

    def __call__(self, value): 
     if db(db.courses.course_name == value).select(): 
      return (db(db.courses.course_name == value).select()[0].id, None) 
     return (value, self.e) 

(http://www.web2py.com/book/default/chapter/07#Custom-validators)