如何在 django-filter 中创建 MultipleChoiceField?
How to create MultipleChoiceField in django-filter?
我有模型颜色:
class Color(models.Model):
color = models.CharField(max_length=32)
def __str__(self):
return self.color
我的产品型号:
class Product(models.Model):
...
color = models.ForeignKey('Color', on_delete=CASCADE)
...
所以我需要创建一个过滤器,我将能够获得例如所有红色、蓝色或黄色产品
我该怎么做?
您可以 .filter(…)
[Django-doc] 使用:
Product.objects.filter(<b>color__name=<i>some_color_name</i></b>)
与some_color_name
例如'Yellow'。如果你有一个颜色对象,你可以使用:
Product.objects.filter(<b>color=<i>some_color</i></b>)
可以使用双下划线 (__
) 来“透视”关系。
要为模型创建具有多个选择的过滤器,您可以使用 ModelMultipleChoiceFilter
[django-filter docs]. You can also pass the form widget
you want to get used for the field, hence for checkboxes you would pass CheckboxSelectMultiple
[Django docs]:
from django import forms
import django_filters
class ProductFilter(django_filters.FilterSet):
color = django_filters.ModelMultipleChoiceFilter(queryset=Color.objects.all(), widget=forms.CheckboxSelectMultiple())
class Meta:
model = Product
fields = ['color'] # Add any other fields you want to filter to the list
我有模型颜色:
class Color(models.Model):
color = models.CharField(max_length=32)
def __str__(self):
return self.color
我的产品型号:
class Product(models.Model):
...
color = models.ForeignKey('Color', on_delete=CASCADE)
...
所以我需要创建一个过滤器,我将能够获得例如所有红色、蓝色或黄色产品
我该怎么做?
您可以 .filter(…)
[Django-doc] 使用:
Product.objects.filter(<b>color__name=<i>some_color_name</i></b>)
与some_color_name
例如'Yellow'。如果你有一个颜色对象,你可以使用:
Product.objects.filter(<b>color=<i>some_color</i></b>)
可以使用双下划线 (__
) 来“透视”关系。
要为模型创建具有多个选择的过滤器,您可以使用 ModelMultipleChoiceFilter
[django-filter docs]. You can also pass the form widget
you want to get used for the field, hence for checkboxes you would pass CheckboxSelectMultiple
[Django docs]:
from django import forms
import django_filters
class ProductFilter(django_filters.FilterSet):
color = django_filters.ModelMultipleChoiceFilter(queryset=Color.objects.all(), widget=forms.CheckboxSelectMultiple())
class Meta:
model = Product
fields = ['color'] # Add any other fields you want to filter to the list