- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个应用程序,其中食物有多个成分,每个成分都有特定的值。我希望能够根据特定成分的值(value)过滤食物。
这是我的模型:
class Food(models.Model):
id = models.AutoField(primary_key=True, db_column="id")
name = models.CharField(max_length=150)
product_type = models.CharField(max_length=150)
class Component(models.Model):
id = models.AutoField(primary_key=True, db_column="id")
name = models.CharField(max_length=150)
value = models.FloatField()
food = models.ForeignKey(Food, related_name='food_components', related_query_name='food_components')
然后我定义过滤器集和 View
import rest_framework_filters as filters
class ComponentFilter(filters.FilterSet):
name = filters.CharFilter(name="name")
val = filters.NumberFilter(name="value", distinct=True)
minval = filters.NumberFilter(name="value", lookup_type="gte", distinct=True)
maxval = filters.NumberFilter(name="value", lookup_type="lte", distinct=True)
class Meta:
model = Component
class FoodFilter(filters.FilterSet):
name = filters.CharFilter(name='name')
product_type = filters.CharFilter(name='product_type')
components = filters.RelatedFilter(ComponentFilter, name='food_components')
class Meta:
model = Food
class FoodViewSet(viewsets.ModelViewSet):
queryset = Food.objects.all()
serializer_class = FoodSerializer
filter_class = FoodFilter
我希望能够使用相关模型中的多个字段(结合两个参数)来过滤 View 集。类似于 http://whatever/foods/components__name=X&components__value=1会让我得到所有元素 X 值为 1 的食物。我正在使用 django-rest-framework-filters ( https://github.com/philipn/django-rest-framework-filters )
据我所知,由于所有食物都包含所有元素,因此 components__name 是无关紧要的,我将获得所有具有值为 1 的成分的食物。如何将两者结合起来?
提前致谢!
最佳答案
您需要创建一个新过滤器来处理 name
、val
对 single Food
与给定的 Component
相关的对象:
class FoodComponentFilter(django_filters.Filter):
def filter(self, qs, value):
strs = value.split(',')
if len(strs) != 2:
raise Exception
return qs.filter(
food_components__in = Component.objects.filter(
name=strs[0],
value=float(strs[1])
)
)
在 FoodFilter
中实例化它:
class FoodFilter(filters.FilterSet):
component_food_pair = FoodComponentFilter(name='dummy_field')
[...]
class Meta:
model = Food
fields = ('component_food_pair',[...])
然后,像这样使用它:
?component_food_pair=Foo,42.0
关于python - Django FilterSet AND(?)条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180161/
我正在创建一个应用程序,其中食物有多个成分,每个成分都有特定的值。我希望能够根据特定成分的值(value)过滤食物。 这是我的模型: class Food(models.Model): id
在我的网站上,我有一个页面显示了所有产品的列表,以及使用 FilterSet 构建的搜索引擎。一切正常,但我想再添加一个搜索选项。我希望能够过滤所有属性设置为 True 的产品,但是当未标记复选框时我
我有 3 个模型: class Category(models.Model): name = models.CharField(max_length=200) slug = model
我正在使用 Django 过滤器包。 我在 View 中以下列方式定义我的过滤器 class UnitFilter(django_filters.FilterSet): class Meta:
我有一个模型可以说 ObservedMoves .在我的 View 中的许多查询中都引用了此模型。因此,不是直接在每个 View 中应用我想要的过滤器,而是将它们抽象到过滤器类中,让我们说 Obser
文档显示 我们有很多字段,我们想让我们的用户根据价格或发布日期进行过滤。我们为此创建了一个 FilterSet: import django_filters class ProductFilter(d
我的应用程序使用 rest-framework 和 django-filter。我使用此 FilterSet 提供按 date 过滤的文章列表 (ModelViewSet): from django_
要求: 我们有一个用于 DEV 和 RELEASE 模式的 ANT 构建文件。我们希望在 DEV 模式下启用过滤并在 RELEASE 模式下禁用它。由于我们对两种模式(DEV 和 RELEASE)使用
我是一名优秀的程序员,十分优秀!