modelform에서 여러 형태의 필드 위에 많은 사람들을 분할
-
19-08-2019 - |
문제
그래서 저는 토너먼트라는 많은 사람들이있는 모델을 가지고 있습니다. 두 개의 토너먼트 필드가있는 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)
왜 그것이 작동하지 않는지 모르겠지만, 나는 단지 그것을 확인하기 위해 그것을 테스트 할 것입니다 ...
편집하다: 테스트하고 작동합니다.
제휴하지 않습니다 StackOverflow