ModelMultipleChoiceFieldは最初の選択肢を選択せず、私の例では次の修正(以下のリンク)を機能させることができません。
http://code.djangoproject.com/ticket/5247#comment:6
私のモデルとフォーム:
class Company(models.Model):
company_name = models.CharField(max_length=200)
class Contact(models.Model):
company = models.ForeignKey(Company)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
class Action(models.Model):
company = models.ForeignKey(Company, blank=True, null=True)
from_company = models.ManyToManyField(Contact, verbose_name='Participant(s) from "Company"', blank=True, null=True)
class Action_Form(ModelForm):
from_company = forms.ModelMultipleChoiceField(queryset=Contact.objects.none(), widget=forms.CheckboxSelectMultiple())
class Meta:
model = Action
私がしていることと結果:
>>> contacts_from_company = Contact.objects.filter(company__exact = 1)#テストの場合は「1」、それ以外の場合は変数 >>> form = Action_Form(initial = {'from_company':[o.pk for o incontacts_from_company]})#修正で提案されたとおり >>>印刷フォーム['from_company'] <ul> </ ul> >>>印刷contacts_from_company [<連絡先:テスト担当者>、<連絡先:別の人>] >>> form2 = Action_Form(initial = {'from_company':contacts_from_company}) >>> print form2 ['from_company'] <ul> </ ul> >>> form3 = Action_Form(initial = {'from_company':Contact.objects.all()}) >>> print form3 ['from_company'] <ul> </ ul>
私が期待していた方法:
1。ビューはrequest.GETから「company」を取得します
2.次にその「company」のすべての「contacts」をフィルタリングし
ます3.最後に、フォームを作成し、それらの「contacts」を次のように渡します"initial ={...}"
2つの質問:
1。[まだ回答されていません] ModelMultipleChoiceFieldにこれらの「初期」値を取得させるにはどうすればよいですか?
2. [回答済み]別の方法として、変数をAction_Form(ModelForm)に渡して、ModelFormで次のことができるようにすることはできますか。
from_company = forms.ModelMultipleChoiceField(queryset=Contact.objects.filter(company__exact=some_id) # where some_id comes from a view