我在特定视图中有queryset
:
class SomeView(View)
def get(self, request, *args, **kwargs):
objs = SomeModel.objects.all()
现在我想以某种方式显示objs
形式的复选框。
此外,queryset
可能始终不是SomeModel.objects.all()
。它可能会在视图中发生变化,具体取决于请求。
实现这一目标的最佳途径是什么?
答案 0 :(得分:1)
这就是ModelMultipleChoiceField的功能。您可以将它与CheckboxSelectMultiple小部件结合使用,以获得您想要的结果。
class MyForm(forms.Form):
my_choices = forms.ModelMultipleChoiceField(
queryset=SomeModel.objects.all(),
widget=forms.CheckboxSelectMultiple)
修改强>
要根据值更改查询集,您需要覆盖__init__
:
def __init__(self, *args, **kwargs):
model_value = kwargs.pop('my_value', None)
super(MyForm, self).__init__(*args, **kwargs)
if model_value is not None:
self.fields['my_choices'].queryset = SomeModel.objects.filter(my_field=my_value)