【问题标题】:Django REST Framework: Provide QuerySet to RendererDjango REST 框架:向渲染器提供 QuerySet
【发布时间】:2016-11-22 17:46:40
【问题描述】:

我们想使用 Django REST 框架将模型数据(通过 Django REST 框架 API 指定的过滤)呈现为绘图。我们的绘图引擎直接使用 Django QuerySets

问题是:如何将模型数据序列化为 Django QuerySets

我们试图创建一个简单地传递数据的序列化器(没有成功):

class QuerySetSerializer(serializers.BaseSerializer):
    many = True
    def to_representation(self, obj):
        return obj

如果可以通过 Django REST 框架访问相同的 QuerySet(通过 Django REST 框架 URL 系统提供的 <my filter> 参数),那将是很棒的,您将在内部使用

mymodel.objects.filter(<my filter>)

关于如何实现这一点的任何想法?

【问题讨论】:

  • 我不明白您希望如何传输数据。您不想将其序列化为 JSON?
  • 没错。我希望 Renderer 能够访问与 API 查询相对应的 QuerySet 实例。 (然后Renderer 可以用QuerySet 做任何它想做的事情——在我的例子中,调用QuerySet 上的一个方法,它将创建一个Plot 为.png)。 (也请参阅我对@jape 的评论 - 希望它更清楚?)

标签: python django django-rest-framework django-queryset


【解决方案1】:

你的意思是做这样的事情吗?

from rest_framework import generics, serializers

from .models import Foo


class QuerySetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = ('id', 'field1', 'field2',)


class QuerySetList(generics.ListAPIView):
    serializer_class = QuerySetSerializer

    def get_queryset(self):
        return Foo.objects.filter(<my filter>)  # You can filter whatever you want here

【讨论】:

  • 我想要的一个例子:假设有一个 Django 模型 Person 具有属性 name 和 email。通过 API,我可以访问具有特定名称的所有 Person 实例,如下所示:/api/?name=John。而不是创建例如json 从这些实例中,我想访问 Person QuerySet(在渲染器中)。这应该等于您使用Person.objects.filter(name=John) 获得的结果。所以我的Q是:当任意API url/api/?name=John被访问时,如何将对应的QuerySet提供给Renderer。 (这现在更清楚了吗?如果以防万一,我可以更新我上面的 Q 吗?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多