class CreateProject(forms.ModelForm):
def __init__(self, user, editable_object=None, *args, **kwargs):
super(CreateProject, self).__init__(*args, **kwargs)
use_required_attribute = True
self.fields['tasks'] = forms.ModelMultipleChoiceField(
widget=forms.SelectMultiple(
attrs={
'class': 'form-control'
}
),
queryset=Task.objects.filter(company=user.company),
required=True,
initial=editable_object.tasks if editable_object else None,
label='Tasks'
)
当我尝试提供editable_object参数(Project模型的对象)时,它无法为任务字段设置初始值,而当我删除此字段的初始值时,它可以正常工作
答案 0 :(得分:2)
找到了答案。 由于ManyToManyField值不是QuerySet对象,因此必须像对Model.objects一样进行过滤
initial=editable_object.tasks.all() if editable_object else None
# code
答案 1 :(得分:0)
对于以后的访问者,我在执行以下操作时会显示错误:
enrollments = user.enrollments().all()
将过滤器更改为这种方式后,它是正确的:
enrollments = user.enrollments.all()
一个很好的示例帮助我在here处克服了这个错误!。