【问题标题】:Django REST, How to display every 5 element in a response?Django REST,如何在响应中显示每 5 个元素?
【发布时间】: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]?您始终可以在从过滤器返回之前记录该列表以查看它是否一致。也许同时获取ifelse 的结果并将其切片,如果需要,转换为列表。
  • return qs not work, Got AttributeError 。因为我在序列化器中有'costs = CoinCostsSerializer(source='filtered_coincosts', many=True)'

标签: python django django-rest-framework


【解决方案1】:

您可以在您的 def 中的 views.py 中像这样使用 tryexcept

try:
    obj = Entry.objects.all()[::5]
except IndexError:
    obj = None

【讨论】:

  • 您好,这不是我的问题。我说“我需要像 Entry.objects.all()[::5] 这样的东西,但我不知道如何用我的代码来做到这一点。”
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多