【发布时间】:2020-07-28 14:23:25
【问题描述】:
现在序列化器显示来自 CoinCosts 模型的所有数据作为响应(价格,时间戳),但只需要每 5 个元素,怎么做?谢谢
我需要像 Entry.objects.all()[::5] 这样的东西,但我不知道如何用我的代码来做到这一点。
我现在的代码:
序列化器.py
class CoinCostsSerializer(serializers.ModelSerializer):
class Meta:
fields = ('price', 'timestamp')
model = CoinCosts
class CoinSerializer(serializers.ModelSerializer):
class Meta:
fields = ('symbol', 'crr', 'costs')
model = Coins
costs = CoinCostsSerializer(source='filtered_coincosts', many=True)
views.py
class DateTimeGteFilter(filters.IsoDateTimeFilter):
def filter(self, qs, value):
if value != None:
return qs.prefetch_related(Prefetch('coincosts_set', to_attr='filtered_coincosts', queryset=CoinCosts.objects.filter(timestamp__gte=value)
)
)
else:
return qs
class CoinCostFilterSet(filters.FilterSet):
timestamp = DateTimeGteFilter()
class Meta:
model = Coins
fields = {
'symbol': ['exact'],
}
【问题讨论】:
-
不是这样的。他们谈论限制。而且我需要显示每五个条目。不限制总数。
-
例如。现在显示带有 id 的记录:1,2,3,4,5,6,7,8,9,10 ... 但它们应该 id: 1,5,10 .... 也许我需要使用 [:: 2]。但是怎么做呢?
-
从过滤器返回查询集对你有用吗?
return qs[::5]?您始终可以在从过滤器返回之前记录该列表以查看它是否一致。也许同时获取if和else的结果并将其切片,如果需要,转换为列表。 -
return qs not work, Got AttributeError 。因为我在序列化器中有'costs = CoinCostsSerializer(source='filtered_coincosts', many=True)'
标签: python django django-rest-framework