我希望对堆栈溢出社区进行简单的查询。
鉴于以下配置,我在“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)
以下是来自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')
最后,这是视图配置:
class TotalViewSet(viewsets.ReadOnlyModelViewSet):
filter_fields = ('total_type', 'location')
queryset = Total.objects.all()
serializer_class = TotalSerializer
问题:
查看调试工具栏,我可以看到使用Total模型不执行任何查询。它对django_Session和auth_user进行查询,就是这样。这些查询按预期返回。
如果我同时使用params(location和total_type)调用,我可以看到它只使用WHERE子句中的位置进行查询,但API仍然没有返回任何结果......即使是查询也是如此(尽管错误地)。
任何想法?
Django 1.6.4 Python 2.7 djangorestframework 2.3.13
答案 0 :(得分:5)
答案(在我发布问题后2分钟让我感到震惊):
我需要在我的选择中使用枚举值,而不是表示名称/值对的实际对象。
像这样:
TOTAL_TYPES = (
(TotalType.daily_sum.value, 'Daily Sum'),
(TotalType.weekly_sum.value, 'Weekly Sum')
)
在我做出此更改之前,除了REST过滤参数之外,其他所有工作都让我感到惊讶。