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 in contacts_from_company]}) # 按照修复建议 >>> 打印表格['from_company'] <ul> </ul> >>> 打印contacts_from_company [<联系人:测试人员>,<联系人:其他人>] >>> form2 = Action_Form(initial={'from_company': contacts_from_company}) >>> 打印 form2['from_company'] <ul> </ul> >>> form3 = Action_Form(initial={'from_company': Contact.objects.all()}) >>> 打印 form3['from_company'] <ul> </ul>
我希望它能够工作的方式:
1. 我的视图从 request.GET 获取“公司”
2. 然后过滤该“公司”的所有“联系人”
3. 最后,它创建一个表单并将这些“联系人”传递为“初始={...}”
两个问题:
1. [尚未回答]如何让 ModelMultipleChoiceField 采用那些“初始”值?
2. [已回答]作为替代方案,我可以将变量传递给 Action_Form(ModelForm) 以便在我的 ModelForm 中我可以:
from_company = forms.ModelMultipleChoiceField(queryset=Contact.objects.filter(company__exact=some_id) # 其中 some_id 来自视图