2012-04-17 2 views
3

두 모델을 사용하여 모델 A와 모델 B를 호출 할 수 있습니다. A에서 B로 외래 키가 있습니다.
즉, A와 B 사이의 카디널리티는 1 : n입니다.formset, inlineformset_Factory 및 kwargs

MF_B라는 B에 해당하는 ModelForm을 만들었습니다. B.에서 정의한 추가 입력란이 있습니다.

위의 코드에서 알 수 있듯이 여기에 선택 사항을 쿼리 세트로 채우고 싶습니다. (초기화()의 생략 코드는 생략했습니다.

거래가 인라인 정의 세트를 사용하여 한 페이지에 A와 여러 개의 양식을 생성하려고합니다. B.

와 형태가 난 그냥 inlineformset_factory 새로운 kwargs로의 무리를 전달하고 싶어하지만, 약 예기치 않은 키워드 인수를 complaing 유지 왜 장고 백엔드 코드를보고 후, 나는 이해 : inlineformset_factory 정의하지 않습니다 kwargs. 메서드 sig에 정의 된 kwargs 만 필요합니다.

def inlineformset_factory(parent_model, model, form=ModelForm, 
          formset=BaseInlineFormSet, fk_name=None, 
          fields=None, exclude=None, 
          extra=3, can_order=False, can_delete=True, max_num=None, 
          formfield_callback=None): 

난 내가 다시의 검색어 와서 개체를 필터링 할 수 self.request.user을 통과해야하기 때문에 ICAN은 formfield_callback을 사용하여 생각하지 않습니다.

제안 사항?

+0

이것은 인라인 양식의 필드를 필터링하기 위해 request.user를 사용하는 예제를 포함하여 [here] (http://stackoverflow.com/questions/7310861/django-passing-parameters-to-inline-formset)에 답변되었습니다. – dgel

+0

@dgel 감사합니다! 나는 그것을 줄 것이다. –

+0

@dgel django 1.3 및 클래스 기반 뷰를 사용하고 있습니다. 나는 아직도 self.request에 어떻게 든 접근 할 수있을 것인가? 당신이 미리 알고있는 경우에 대비하여 지금 시도하고 있습니다. –

답변

0

지정한 다중 쿼리 필드로 MultipleChoiceField를 제한하려면 팩토리를 사용해야합니다. 이 경우에는 약간의 혼란이다 inlineformset_factory_factory 겠지만, 예를 들면 : forms.py에서

(또는 유사) 특히

def make_inlineformset_factory(queryset, xmodel): 
    """ 
    Returns an Inlineformset factory for the given queryset . . . 
    """ 
    class My_inlineformset_factory(): 
     stuff = forms.ModelChoiceField(queryset=queryset) 
     class Meta: 
      model = xmodel 
    return My_inlineformset_factory 

나는 여기에 첫 번째 대답과 유사한 접근 방식을 생각하고 : django: How to limit field choices in formset? 그러나 Inlineformset_factory에 맞게 적절하게 조정하십시오.

나중에 시간을 찾을 수있을 때 자세한 내용과 설명을 추가하기 위해 편집 할 수 있습니다.