如何在django过滤器中创建MultipleChoiceField



我有一个模型颜色:

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)
...

因此,我需要创建一个过滤器,我将能够获得例如所有红色、蓝色或黄色产品

我该怎么做

要为模型创建具有多个选项的过滤器,可以使用ModelMultipleChoiceFilter[django filter docs]。您还可以传递想要用于字段的表单widget,因此对于复选框,您可以传递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

您可以.filter(…)[Django doc]使用:

Product.objects.filter(color__name=some_color_name)

带有some_color_name,例如"黄色"。如果你有一个彩色对象,你可以使用:

Product.objects.filter(color=some_color)

可以使用双下划线(__(来表示";通过";关系

最新更新