나는 양식을 가지고 : django ModelMultipleChoiceField에 사용자 정의 선택을 추가하는 방법?
class SearchForm(Form):
owner = ModelMultipleChoiceField(queryset=User.objects.all(), required=False)
예상하지만 주인없이 객체를 가지고대로 작동 관련보기 get_queryset()
를 사용자 지정 후
(0,'Without owner')
그래서 난 소유자없이 개체 만 필터링 할 수 있습니다. 이 옵션을 추가하는 방법은 무엇입니까?
UPDATE : 나는 form.__init__
에 검색을 추가하고 사용자 정의 청소 방법을 썼습니다하지만 추가 옵션 뭔가를 선택하면 내가 form.is_valid
를 오버라이드 (override) 할 필요가 추측 내 깨끗한 method.I'm에 도착하기 전에 ValidationError
을 제기하지만 난 아니에요 그것을 수행하는 방법 그래서 나는 여전히 기본 is_valid 메서드를 사용할 수 있습니다.
내 코드
def __init__(self, *args, **kwargs):
super(ClientListSearchForm, self).__init__(*args, **kwargs)
self.fields['owner'].choices = \
list(self.fields['owner'].choices)+[('0', 'n/a')]
def clean_owner(self):
logger.debug('CLEAN_OWNER:')
data = self.cleaned_data.get('owner')
logger.debug('data: %s' % data)
if data == 0:
logger.debug('Data zero - not assigned')
return data
users = User.objects.all()
if all(e in users for e in data):
logger.debug('Data in users - validating ok')
return data
else:
raise ValidationError('Incorrect owner')
나는 시도 :
def is_valid(self):
try:
super(ClientListSearchForm, self).is_valid()
except ValidationError as e:
logger.debug('val error: %s' % e.args)
하지만 그건도 예외
UPDATE2 추가 된 사용자 정의 유효성 검사기
def userWithEmpty(value):
users = User.objects.values_list('pk').all()
v =list()
for va in value:
v.append(int(va))
u = list()
for us in users:
u.append(int(us[0]))
if not (all(e in u for e in v)or v ==0):
raise ValidationError('Invalid Value: %s' % value)
의 유효성을 검사하거나 캐시 있습니까 w 더 나은을 my for 루프보다 iterable의 모든 값을 변환 할 수 있습니까?
개선의 여지가 많아 답변으로 게시하지 않았습니다.
그것은 EEE를 작동이 중지 ... 내가 뭐가 잘못을하고있어 내가 모든 것을 감사합니다 일에 대해 호언 장담을 기다리는 -validators=[]
참조 http://stackoverflow.com/a/5282889/263989 – fasouto