我希望有一个简单的堆栈溢出社区查询。
给定以下配置,我的“Totals”模型中有一个相当简单的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)

以下是url.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')

最后,这里是视图配置:
class TotalViewSet(viewsets.ReadOnlyModelViewSet):
    filter_fields = ('total_type', 'location')
    queryset = Total.objects.all()
    serializer_class = TotalSerializer

问题是:
对所有“totals”的请求可以正常工作:get/totals返回all。
按位置列出的“总计”请求可以正常工作:get/totals?location=1返回位置1的所有总计。
按总计类型请求总计返回0个结果,不正确:get/totals?total_type=1返回0个结果。没有抛出错误。
查看debug工具栏,我可以看到没有使用Total模型执行任何查询它对django_会话和auth_用户进行查询,就是这样。这些查询按预期返回。
如果同时使用两个参数(location和total_type)调用,我可以看到它只使用WHERE子句中的location进行查询,但是API仍然没有返回任何结果……甚至查询也返回了结果(尽管错误)。
有什么想法吗??
Django 1.6.4公司
蟒蛇2.7
djangorestframework 2.3.13版

最佳答案

答案(在我发布问题2分钟后我突然想到):
我需要在我的选择中使用枚举值,而不是表示名称/值对的实际对象。
这样地:

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

我很惊讶,在我做这项更改之前,除了其他过滤参数之外,其他一切都工作了。

10-07 20:23