一、直接修改queryset

Django ModelChoiceField提供了一种直接修改queryset的方式,可以在定义ModelChoiceField时,通过queryset参数传入修改后的queryset实现。


field = ModelChoiceField(queryset=MyModel.objects.filter(status=1))

在上面的代码中,我们定义了一个ModelChoiceField,并且传入了一个queryset,该queryset只包含MyModel中status为1的实例,这样就可以在ModelChoiceField中只显示status为1的实例了。

二、使用get_queryset()方法修改queryset

Django ModelChoiceField也提供了一种使用get_queryset()方法修改queryset的方式,需要在定义ModelChoiceField时,重写get_queryset()方法,传入修改后的queryset实现。


class MyModelChoiceField(ModelChoiceField):
    def get_queryset(self):
        return MyModel.objects.filter(status=1)

field = MyModelChoiceField()

在上面的代码中,我们定义了一个继承自ModelChoiceField的MyModelChoiceField,并且重写了get_queryset()方法,传入了一个queryset,该queryset只包含MyModel中status为1的实例,这样就可以在MyModelChoiceField中只显示status为1的实例了。