2014-10-20 2 views
0

내 코드는 현재 모든 사용자에게 제공되며 어떤 이유로 든 드롭 다운에 ID가 있습니다.드롭 다운 양식에 테이블 연결

내가 원하는 것 : 사용자를 선택하면 할당에 추가됩니다. 드롭 다운에서 사용자 ID가 표시되지 않아야합니다. (현재 DoD (1))

링크 테이블에 이미있는 사용자를 얻는 방법은 무엇입니까?)와 db.assignments_users 표에서 사용자가 볼 수 드롭 다운

addUserForm = SQLFORM(db.assignments_users, showid=False, submit_button=T('Add User')).process() 

답변

1

에서 ID를 제거, 아마도 db.auth_users 테이블로 연결되는 참조 필드가있다. 기본적으로 참조 필드에는 연결된 테이블의 모든 ID를 허용하는 IS_IN_DB 유효성 검사기가 있습니다. 유효성 검사기는 양식의 select 위젯을 생성하는 데 사용되며 위젯의 값은 연결된 테이블의 format 속성을 기반으로 생성됩니다. db.auth_user 테이블의 기본값 인 format'%(first_name)s %(last_name)s (%(id)s)'입니다. 따라서 이름 뒤에 괄호 안에 db.auth_user 레코드 ID가 표시됩니다.

참조 필드에 대해 자체 유효성 검사기를 명시 적으로 지정하여 위의 기본 동작을 재정의 할 수 있습니다. IS_IN_DB 유효성 검사기의 첫 번째 인수는 특정 레코드 집합을 정의하는 Set 개체가 될 수 있습니다 (참조 된 테이블의 모든 레코드를 나열하지 않으려는 경우).

Field('user_id', 'reference auth.user', 
     requires=IS_IN_DB(db(query), 'auth_user.id', '%(first_name)s %(last_name)s')) 

query이 설정 좁아 쿼리해야합니다 : IS_IN_DB에 세 번째 인수는 각 레코드 (파이썬 문자열 형식으로 또는 기능/람다)에 대한 사용자 정의 레이블을 지정할 수 있습니다 label 인수입니다 목록에 포함하려는 사용자 ID 당신은 또한, 참조 필드의 requires 속성을 지정하지 않은

참고가 자동으로 기본 IS_IN_DB 검증을 얻기 위해, 당신은 또한 (참조 된 테이블의 format 속성에 따라) 기본 represent 속성을 얻을. 마지막으로

Field('user_id', 'reference auth_user', 
     requires=IS_IN_DB(db(query), 'auth_user.id', '%(first_name)s %(last_name)s'), 
     represent='%(first_name)s %(last_name)s') 

, 당신은에서 사용자 ID를 제거 재고 할 수 있습니다 : 당신이 명시 적으로 자신의 requires 속성을 포함 할 때뿐만 아니라 지정 할 수 있도록하지만, 당신은 더 이상 기본 represent 속성을 얻을 레이블. ID가 없으면 두 명의 사용자가 같은 이름을 가진 경우 두 이름이 모두 목록에 표시되지만 다른 이름을 알 수있는 방법은 없습니다.

+0

대단히 고마워, 내가 필요한거야. 이제는 assignments_users에서만 원하는 다른 문제에 봉착했습니다. 여기서 assign_id == request.args (0) 내가 성공하지 못한 것을 시도했습니다. db.assignments_users (db.assignments_users.assignment_id == request.args (0)) db (db.assignments_users.assignment_id == request.args (0)) 나는 그것을 직접 작성하는 것을 제외하고는 다른 방법으로는 할 수 없다는 단서가 있지만, 거기에 어떤 종류의 함수가있을 것으로 기대한다. – PrivateerGerrit

+0

무슨 뜻인지 확실치 않습니다. 'db.assignments_users.user_id' 드롭 다운에서 사용자 목록을 필터링하는 것에 대해 이야기하고 있습니까? 이 드롭 다운은'db.auth_user'가 아니라'db.auth_user'의 레코드로 채워집니다. 그렇다면 후자에 대한 쿼리가 어떻게 도움이 될까요? 드롭 다운에있는 사용자 목록이 지정된 할당에 대한'db.assignments_users' 테이블에 이미있는 사용자 만되도록 하시겠습니까? 어떻게 그 테이블에 새로운 사용자를 추가 할 수 있습니까? 또한,'request.args (0)'에 의해 할당이 결정되면, 폼은 사용자가 할당 필드를 채우도록 허용해서는 안됩니다. – Anthony

관련 문제