2009-07-28 5 views
0

이 같은 형태를 가지고 값을 선택 필드에 넣고 쿼리 세트를 현재 로그인 한 사용자가 필터링해야합니다.사용자

class MyForm(forms.Form): 
    def __init__(self, user, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.myfield = forms.ChoiceField([('%s' % d.id, '%s' % d.name) for d in MyModel.objects.filter(owners = user)]) 

하지만 양식을 렌더링 한 후 얻을 수있는 모든 대신 선택 - 위젯의 문자열로 객체 참조 : 그것은 요청 객체를 포함하도록 그래서 방법 서명을 변경했습니다. 한 번 선언 된 양식 필드는 수정할 수없는 것 같습니다.

아이디어가 있으십니까?

답변

2

이와 코드의 마지막 줄을 바꾸기 :

self.fields['myfield'].choices = [('%s' % d.id, '%s' % d.name) for d in MyModel.objects.filter(owners = user)] 
0

I입니다 여기에 생각이있어 무엇 후 : 가정 것

class MyForm(forms.Form): 
    def __init__(self, user, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['myfield'] = forms.ModelChoiceField(MyModel.objects.filter(owners=user)) 

당신의 MyModel 반환 self.name__unicode__ 방법. 이 아닌 경우 ModelChoiceField의 하위 클래스를 지정하고 label_from_instance 메서드를 재정의 할 수 있습니다.

관련 문제