gpt4 book ai didi

python - 如何在 django_filters 中使用 ModelMultipleChoiceFilter 和 JSONfield

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:19 25 4
gpt4 key购买 nike

我尝试在模型中使用 django_filtersJSONfield 来过滤项目,但我不能这样做。

如果使用 CharFields 我可以获得当前结果,但我需要处理请求。
当我使用 ModelMultipleChoiceFilter 时,我得到了过滤器的所有变体,但过滤不会发生。

模型.py

class Product(models.Model):
name = models.CharField(max_length=120)
properties = JSONField(default=dict, blank=True, null=True, db_index=True)

Filters.py

from django_filters.rest_framework import FilterSet
from django_filters import rest_framework as filters
from products.models import Product

class ProductFilter(FilterSet):
color = filters.ModelMultipleChoiceFilter(
queryset=Product.objects.extra(
select={'color': "properties->>'color'"}).values_list('properties__color',
flat=True).distinct(),
field_name='properties',
to_field_name='properties',
lookup_expr='color__contains',
)

class Meta:
model = Product
fields = {
'color': 'color__contains',
}

这是项目

{
"id": 10,
"name": "Test_3",
"properties": {
"color": "Black",
"invertor technology": false,
"service area, m²": 24
},
},

如果我选择过滤颜色黑色,
我遇到此错误:选择正确的选项。黑色不属于有效值。

最佳答案

结果非常简单,只需使用AllValuesMultipleFilter

class ProductFilter(FilterSet):
color = filters.AllValuesMultipleFilter(
field_name='properties__color',
lookup_expr='contains,
)

非常感谢rpkilby 。链接此issue .

关于python - 如何在 django_filters 中使用 ModelMultipleChoiceFilter 和 JSONfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56956120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com