gpt4 book ai didi

python - django rest framework 过滤器忽略映射到枚举的 int 字段

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

我希望对堆栈溢出社区有一个简单的查询。

鉴于以下配置,我的“总计”模型上有一个相当简单的 int 字段,似乎无法在该字段上进行过滤。

这是来自 models.py 的对象:

class TotalType(Enum):
daily_sum = 1
weekly_sum = 2

class Total(models.Model):

TOTAL_TYPES = (
(TotalType.daily_sum, 'Daily Sum'),
(TotalType.weekly_sum, 'Weekly Sum')
)

location = models.ForeignKey(Location, db_column='LocationId')
ci_timestamp = models.DateTimeField(db_column='ci_TimeStamp', blank=False, null=False)
amount = models.DecimalField(max_digits=12, decimal_places=2, blank=False, null=False)
total_type = models.IntegerField(max_length=5, blank=False, choices=TOTAL_TYPES)

这是来自 urls.py 的路由器信息:

router = DefaultRouter()
router.register(r'totals', TotalViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls))
)

这是我的对象序列化器:

class TotalSerializer(serializers.HyperlinkedModelSerializer):
location = serializers.HyperlinkedRelatedField(view_name="location-detail", many=False)

class Meta:
model = Total
fields = ('id', 'location', 'ci_timestamp', 'amount', 'total_type')

最后,这里是 View 配置:

class TotalViewSet(viewsets.ReadOnlyModelViewSet):        
filter_fields = ('total_type', 'location')
queryset = Total.objects.all()
serializer_class = TotalSerializer

问题:

  1. 对所有“总计”的请求工作正常:GET/totals 返回全部。
  2. 按位置请求“总计”工作正常:GET/totals?location=1 返回位置 1 的所有总计。
  3. 请求按 total_type 返回 0 个结果,错误地:GET/totals?total_type=1 返回 0 个结果。没有抛出错误。

查看调试工具栏,我可以看到没有使用 Total 模型执行任何查询。它对 django_Session 和 auth_user 进行查询,仅此而已。这些查询按预期返回。

如果我使用两个参数(location 和 total_type)进行调用,我可以看到它只使用 WHERE 子句中的位置进行查询,但 API 仍然没有返回任何结果……即使查询返回了结果(尽管是错误的).

有什么想法吗?

Django 1.6.4Python 2.7djangorest 框架 2.3.13

最佳答案

答案(在我发布问题 2 分钟后让我印象深刻):

我需要在我的选择中使用枚举值,而不是代表名称/值对的实际对象。

像这样:

TOTAL_TYPES = (
(TotalType.daily_sum.value, 'Daily Sum'),
(TotalType.weekly_sum.value, 'Weekly Sum')
)

令我惊讶的是,在我进行此更改之前,除 REST 过滤参数外,其他一切都有效。

关于python - django rest framework 过滤器忽略映射到枚举的 int 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372368/

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