문제

그래서 저는 토너먼트라는 많은 사람들이있는 모델을 가지고 있습니다. 두 개의 토너먼트 필드가있는 modelform이 있습니다.

pay_tourns = forms.ModelMultipleChoiceField(
                        queryset=Tourn.objects.all().active().pay_tourns(),
                        widget=forms.CheckboxSelectMultiple())
rep_tourns = forms.ModelMultipleChoiceField(
                        queryset=Tourn.objects.all().active().rep_tourns(),
                        widget=forms.CheckboxSelectMultiple())

결국 () 이후의 방법은 서브 클래스 쿼리 세트에서 나온 것입니다. 내 견해로 양식을 저장할 때 다음과 같습니다.

post.tournaments = (post_form.cleaned_data.get('pay_tourns')
                                + post_form.cleaned_data.get('rep_tourns'))

어쨌든, 이것은 모두 잘 작동합니다. 내가 할 수없는 방법은 기존 게시물을로드 할 때 이러한 양식 필드를 채우는 것입니다. 즉, 인스턴스 = 포스트를 양식으로 전달할 때입니다. 어떤 아이디어?

도움이 되었습니까?

해결책 2

Paolo Bergantino는 올바른 길을 가고 있었고 그것을 찾도록 도와주었습니다. 이것은 해결책이었습니다.

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)

    instance = kwargs.get('instance')
    if instance:
        self.fields['pay_tourns'].initial = [ o.id for o in instance.tournaments.all().active().pay_tourns()]
        self.fields['rep_tourns'].initial = [ o.id for o in instance.tournaments.all().active().rep_tourns()]

다른 팁

Modelform에 이런 일을 할 수 있습니다.

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)

    instance = kwargs.get('instance')
    if instance:
        self.fields['pay_tourns'].queryset.filter(post=instance)
        self.fields['rep_tourns'].queryset.filter(post=instance)

왜 그것이 작동하지 않는지 모르겠지만, 나는 단지 그것을 확인하기 위해 그것을 테스트 할 것입니다 ...

편집하다: 테스트하고 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top