首页 > 解决方案 > Django 过滤器表单默认显示为下拉列表;更改为复选框

问题描述

我在 models.py 中有一个如下定义的模型

class ImageGrab(models.Model):
    title = models.CharField(max_length=50)
    slug=models.CharField(max_length=200)
    age=models.ForeignKey(Age, on_delete=models.CASCADE)
    gender=models.ForeignKey(Gender, on_delete=models.CASCADE)
    masked=models.ForeignKey(Mask, on_delete=models.CASCADE)
    withBackpack=models.ForeignKey(Backpack, on_delete=models.CASCADE)

在 filters.py 中定义如下的过滤器:

class ImageFilterAge(django_filters.FilterSet):
    class Meta:
        model = ImageGrab
        fields = ['age']

###others similar to this 

class ImageFilter(django_filters.FilterSet):
    class Meta:
        model = ImageGrab
        fields = ['age', 'gender', 'masked', 'withBackpack']

视图如下views.py中定义

def images(request):
    imagelist = ImageGrab.objects.all()
    imagefilter = ImageFilter(request.GET, queryset=imagelist)
    agefilter = ImageFilterAge(request.GET, queryset=imagelist)
    genderfilter=ImageFilterGender(request.GET, queryset=imagelist)
    maskedfilter= ImageFilterMask(request.GET, queryset=imagelist)
    backpackfilter = ImageFilterBackpack(request.GET, queryset=imagelist) 
    return render(request, 'imglist.html', {'filter': imagefilter,'agefilter': agefilter.form, 'genderfilter':genderfilter.form, 'maskfilter':maskedfilter.form, 'backpackfilter':backpackfilter.form})

我的模板是这样的,在 imglist.html

<form method="get" name="search" id="search">
    {{ agefilter }} <br>
    {{ genderfilter }} <br>
    {{ maskfilter }} <br>
    {{ backpackfilter }} <br>
</form>

默认情况下,这呈现为下拉选择表单,如下图链接所示。我想将其更改为过滤器的复选框多选和/或单选按钮。 使用下拉过滤

如何去做这件事?

提前致谢。

标签: djangocheckboxfilterdropdown

解决方案


我结合了上面两个用户给出的两种解决方案,得到了解决方案:

过滤器.py

age = ModelMultipleChoiceFilter(queryset=Age.objects.all(),widget=forms.CheckboxSelectMultiple())

模型.py

class Age(models.Model):
    ageChoices=(
        ('Child', 'Child'),
        ('Adult', 'Adult'),
        ('Old', 'Old'),
    )
    age = models.CharField(max_length=5, choices=ageChoices)

好的是过滤器似乎也可以巧妙地处理数据集。

感谢用户 Abdul Aziz Barkat & Vosem

在此处输入图像描述


推荐阅读