我有一个模型颜色:
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)
可以使用双下划线(__
(来表示";通过";关系