django - 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>
默认情况下,这呈现为下拉选择表单,如下图链接所示。我想将其更改为过滤器的复选框多选和/或单选按钮。 使用下拉过滤
如何去做这件事?
提前致谢。
解决方案
我结合了上面两个用户给出的两种解决方案,得到了解决方案:
过滤器.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
推荐阅读
- parameters - 参数化 Jenkins 流水线
- c++ - C++:对“NameSpace::Class::Constructor”的未定义引用
- javascript - 网格中行之间的空间
- python - 撤消“2to3”库的更改
- javascript - exitFullscreen 不退出全屏
- ajax - 用于选择日期的 WooCommerce 预订 AJAX 代码
- netlogo - NetLogo 无法检测半径内的海龟
- reactjs - 单击 ReactJS 上的按钮时,报价机无法获取新的 api 报价
- python-3.x - 访问 API 端点时,Flask 引发 psycopg2 错误符号未找到_PQencryptPasswordConn:Psycopg2 在 MacOS 上是否稳定?
- lit-element - 来自父 Promise 的子属性