我希望有一个简单的堆栈溢出社区查询。
给定以下配置,我的“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')
)
我很惊讶,在我做这项更改之前,除了其他过滤参数之外,其他一切都工作了。