问题描述
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)
...
所以我需要创建一个过滤器,我将能够获得例如所有红色、蓝色或黄色产品
我该怎么做?
解决方法
Product.objects.filter(color__name=some_color_name)
与 some_color_name
例如“黄色”。如果您有颜色对象,则可以使用:
Product.objects.filter(color=some_color)
可以使用双下划线 (__
) 来“透视”关系。
要为模型创建具有多种选择的过滤器,您可以使用 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