这是一个包含一些字段和属性carbs_g_secured
的模型:
型号.py
class Food(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=255)
ingredients_label = models.TextField()
moisture_g = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True)
def __str__(self):
return self.name
def carbs_g_secured(self):
# If moisture is missing
if self.carbs_g :
return self.carbs_g,'Carbs provided'
else :
return None, 'Moisture is missing'
我想在carbs_g_secured
属性上使用django-rest-framework
进行一些最小/最大过滤。我知道我不能直接用Django-filters
来做这件事,但我试图覆盖整个事情
我有以下方法:
序列化程序.py
class FoodSerializer(serializers.ModelSerializer):
carbs_g_secured = serializers.ReadOnlyField()
class Meta:
model = Food
fields = '__all__'
视图.py
class FoodFilter(filters.FilterSet):
carbs_g_secured_max = django_filters.NumberFilter(method='MyPropertyFilter')
class Meta:
model = Food
fields = {'name': ['exact', 'in', 'startswith'],
'species':['exact'],
'protein_g':['exact','lte','gte'],
'carbs_g_secured_max':['exact']}
def MyPropertyFilter(self, queryset, name, value):
results = [row for row in queryset if value and row.carbs_g_secured()[0] and row.carbs_g_secured()[0] < value]
return results
问题是它返回的是一个list
,而它期望的是一个query set
web_1 | AssertionError: Expected 'FoodFilter.carbs_g_secured_max' to return a QuerySet, but got a list instead.
看来我有点困了。我认为把这个列表转换成query set
是不好的做法
你们觉得怎么样? 我在往好的方向走吗?我还有20个类似的属性要过滤。我甚至在考虑将所有这些属性转换为模型字段。它们都是用食物模型的原始场进行合理演算的结果
我如何才能成功地进行此筛选并处理格式期望
目前没有回答
相关问题 更多 >
编程相关推荐