2010-01-25 3 views
1

장고에서 formset 및 model formset을 여러 번 보았지만 여러모로 똑똑한 방법을 생각할 수 없다. 이.모델에 대한 체크 박스, 두 개의 제출 버튼 : 그룹 모델에 사람 모델 추가, 그룹 모델에서 사람 모델 거부

나는 두 가지 모델이 있습니다

Group

Person

내가 특정 그룹에 가입하려고하는 모든 사람을 포함하는의 검색어가 : 내가 원하는 것을 지금 Person.objects.filter(wantsToJoinGroup=groupD)

을 할 일은 각 그룹 옆에 특정 그룹에 가입하려는 확인란이있는 페이지를 표시하는 것입니다. 그런 다음 해당 확인란을 선택하고 '그룹에 수용'버튼을 클릭합니다. 나는이 사람들을 특정 집단에 일괄 적으로 추가하기를 원한다.

내가 어떻게하는지 이해하지 못한 것은 정확하게 확인란의 일입니다. 나는 modelform을 확장하려고 시도하고 나서 formset을 만들었지 만 매번 실패합니다. 마치 formset 모델을 사용하여 modelformset을 사용해야하는 것처럼 보이지만 확인란을 추가하기 위해 양식을 확장 할 수 없습니다. 내가 어떻게 해? 다음

alt text http://img403.imageshack.us/img403/1002/draft.png

그래서 기본적이다, 체크 박스 및 템플릿에있는 사람이 모델에 액세스하는 방법과 : 여기

은 가지고 내가 좋아하는 것이 무엇의 페인트에 10 초 초안 보기에 이것을 처리하는 방법.

미리 감사드립니다.

편집 : 그런데, 누군가가 템플릿에 그 안에 각 개체에 액세스 할 수있는 방법이 없다면, ModelMultipleChoiceField를 사용하여 제시하기 전에, 이것이 내가해야 할 일을 성취하지 않습니다. 내가 아는 한, 템플릿에서 ModelMultipleChoiceField의 객체를 반복 할 수는 없습니다. 내가 틀렸다면 나를 바로 잡아주세요!

답변

1

modelform을 사용한다는 생각이 들지 않는다면 ModelMultipleChoiceField와 함께 일반 양식을 사용하고 __init__에있는 쿼리 세트를 제공 한 다음 템플릿 컨텍스트에 동일한 쿼리 세트를 제공합니다 (반복 할 때). 여가)에 :

#view 
def add_to_group(request): 
    persons = Person.objects.filter(wantsToJoinGroup=groupD) 
    if request.POST: 
     form = PersonAddForm(persons, request.POST) 
     if form.is_valid(): 
      #your handling logic 
    form = PersonAddForm(persons) 
    context = {'persons': persons, 'form': form} 
    return render_to_response(template, context) 

#form 
class PersonAddForm(forms.Form): 
    def __init__(self, queryset, *args, **kwargs): 
     super(PersonAddForm, self).__init__(*args, **kwargs) 
     self.fields['persons'] = forms.ModelMultipleChoiceField(queryset=queryset, 
            widget=forms.CheckboxSelectMultiple()) 
+0

안녕하세요! 답변 주셔서 감사합니다! 귀하의 솔루션을 노력하고있어,하지만 내 양식은 항상 is_valid(), 어떤 생각이 왜 false를 returing입니까? – Clash

+0

그냥 요청을 전달할 필요가있는 것으로 생각했습니다. 포스 및 쿼리 세트가 폼에 ... 그런데, 작동하도록하기 위해'kwargs.pop ('queryset', None) '을 사용해야했습니다. – Clash

+0

키워드가 아닌 위치 지정 인수로 전달하므로 팝업 할 필요가 없습니다. 나는이 패턴을 사용한다. 요청을 전달해야 할 것입니다. (POST에서 분명히) 유효성을 검사하기위한 양식에 POST하지만 POST에는 표시되지 않습니다. 나는 명시 적으로 편집 할 것이다. – DrBloodmoney

0

내 머리 위로 '액션'이라는 숨겨진 필드를 삽입 할 수 있습니다. 수락 및 거부 단추의 onclick 이벤트에서 숨김 필드의 값을 적절하게 설정 한 다음 양식을 제출하십시오.

숨겨진 필드 값을 확인하여 동의 또는 거부 여부를 확인하십시오.

+0

안녕하세요. Danny, 답변 해 주셔서 감사합니다. 장고 쪽에서 뭔가 좋은 javacript가 우선적으로 필요합니다. 확인란은 어떻게 수행 할 수 있습니까? – Clash

+0

양식 입력란을 선택적으로 제출할 수 없기 때문에 자바 스크립트없이 가능한지 확실하지 않습니다. 자바 스크립트를 원하지 않으면 수락 및 거부 라디오 버튼을 만들고 별도의 제출 버튼을 클릭하십시오. – dannyroa

1

당신은 실제로 ModelMultipleChoiceField의 항목이 방법을 얻을 수 있습니다 :

my_field이 ModelMultipleChoiceField의 인스턴스
my_field.field.queryset 

.

+0

답변 해 주셔서 감사합니다. – Clash

관련 문제