如何反向查询 django_filters 字段
how to reverse query for django_filters fields
models.py
class Product(models.Model):
.
.
pass
class Color(models.Model):
color_name = models.CharField(blank=True, max_length=50)
color = ColorField(default='#FF0000')
class ProductColor(models.Model):
product = models.ForeignKey('Product', on_delete=models.CASCADE)
color = models.ForeignKey('Color', on_delete=models.CASCADE)
filters.py
class ProductFilter(django_filters.FilterSet):
class Meta:
model = Product
fields = ['color',]
我想使用 django_filters 按颜色过滤产品,我应该怎么做??
在您的视图中,您可以进行这样的查询
c = Color('my desired color', '#ffffff')
result = ProductColor.objects.filter(color=c.color)
for r in result:
# do something ...
您可以在 filters.py
文件中添加新过滤器,但请参考 ProductColor
模型。
filters.py
class ProductFilter(django_filters.FilterSet):
productcolor__color__color = django_filters.CharFilter(lookup_expr='iexact')
productcolor__color__color_name = django_filters.CharFilter(lookup_expr='iexact')
class Meta:
model = Product
请注意,我使用 productcolor__color__color
来引用 Color
模型中的 color
属性。双下划线访问 ForeignKey 属性.
lookup_expr='iexact'
将匹配小写和大写颜色代码(#fff* 或 #FFF)。
然后一个简单的 HTML 来过滤您的查询集可以是:
<form method="get">
{{ filter.form.as_p }}
<button type="submit">Search</button>
</form>
<ul>
{% for product in filter.qs %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
{{ product.name }}
只是一个例子,不知道你的Product
模型有没有name
字段。但是您可以按照 {{ product.<field_name> }}
.
访问您的产品
您可以在此处阅读有关 django_filters 的更多信息:https://simpleisbetterthancomplex.com/tutorial/2016/11/28/how-to-filter-querysets-dynamically.html
models.py
class Product(models.Model):
.
.
pass
class Color(models.Model):
color_name = models.CharField(blank=True, max_length=50)
color = ColorField(default='#FF0000')
class ProductColor(models.Model):
product = models.ForeignKey('Product', on_delete=models.CASCADE)
color = models.ForeignKey('Color', on_delete=models.CASCADE)
filters.py
class ProductFilter(django_filters.FilterSet):
class Meta:
model = Product
fields = ['color',]
我想使用 django_filters 按颜色过滤产品,我应该怎么做??
在您的视图中,您可以进行这样的查询
c = Color('my desired color', '#ffffff')
result = ProductColor.objects.filter(color=c.color)
for r in result:
# do something ...
您可以在 filters.py
文件中添加新过滤器,但请参考 ProductColor
模型。
filters.py
class ProductFilter(django_filters.FilterSet):
productcolor__color__color = django_filters.CharFilter(lookup_expr='iexact')
productcolor__color__color_name = django_filters.CharFilter(lookup_expr='iexact')
class Meta:
model = Product
请注意,我使用 productcolor__color__color
来引用 Color
模型中的 color
属性。双下划线访问 ForeignKey 属性.
lookup_expr='iexact'
将匹配小写和大写颜色代码(#fff* 或 #FFF)。
然后一个简单的 HTML 来过滤您的查询集可以是:
<form method="get">
{{ filter.form.as_p }}
<button type="submit">Search</button>
</form>
<ul>
{% for product in filter.qs %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
{{ product.name }}
只是一个例子,不知道你的Product
模型有没有name
字段。但是您可以按照 {{ product.<field_name> }}
.
您可以在此处阅读有关 django_filters 的更多信息:https://simpleisbetterthancomplex.com/tutorial/2016/11/28/how-to-filter-querysets-dynamically.html