django REST框架 - 嵌套ModelSerializer的有限查询器? [英] django REST framework - limited queryset for nested ModelSerializer?
问题描述
我目前是以下内容:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
我不认为我可以在我的观点中指定查询集的原因是这实际上是另一个序列化程序的嵌套部分。
模型。 py
class Container(models.Model):
size = models.CharField(max_length = 20)
shape = models.CharField(max_length = 20)
类项目(models.Model):
container = models.ForeignKey(Container,related_name ='items')
name = models.CharField(max_length = 20)
color = models.CharField(max_length = 20)
< h2> views.py
class ContainerViewSet(viewsets.ModelViewSet):
queryset = Container.objects.all() #只有少量容器
serializer_class = ContainerSerializer
serializers.py
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields =('name','color')
class ContainerSerializer(serializers.ModelSerializer):
items = ItemSerializer(many = True)每个容器数百万项
class Meta:
model = Container
fields =('大小','形状','项目')
在您的视图集中,您可以指定查询集,如下所示:
from rest_framework import serializers,viewsets
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all )[:500]
serializer_class = MyModelSerializer
我想你正在寻找的是 SerializerMethodField
。
所以你的代码如下所示:
class ContainerSerializer(serializers.ModelSerializer):
items = SerializerMethodField('get_items')
class Meta:
model = Container
$ b $ getBuffer(container = container)[:500 ]#无论你的查询可能是
serializer = ItemSerializer(instance = items,many = True)
return serializer.data
一个可以看出的是,$ code> SerializerMethodField 是只读的。
I have a ModelSerializer, but by default it serializes all the objects in my model. I would like to limit this queryset to only the most recent 500 (as opposed to all 50 million). How do I do this?
What I have currently is the following:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
The reason I don't think I can just specify the queryset in my viewset is that this is in fact the nested portion of another serializer.
models.py
class Container(models.Model):
size = models.CharField(max_length=20)
shape = models.CharField(max_length=20)
class Item(models.Model):
container = models.ForeignKey(Container, related_name='items')
name = models.CharField(max_length=20)
color = models.CharField(max_length=20)
views.py
class ContainerViewSet(viewsets.ModelViewSet):
queryset = Container.objects.all() # only a handful of containers
serializer_class = ContainerSerializer
serializers.py
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('name', 'color')
class ContainerSerializer(serializers.ModelSerializer):
items = ItemSerializer(many=True) # millions of items per container
class Meta:
model = Container
fields = ('size', 'shape', 'items')
In your View Set you may specify the queryset like follows:
from rest_framework import serializers, viewsets
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()[:500]
serializer_class = MyModelSerializer
I think what you are looking for is the SerializerMethodField
.
So your code would look as follows:
class ContainerSerializer(serializers.ModelSerializer):
items = SerializerMethodField('get_items')
class Meta:
model = Container
fields = ('size', 'shape', 'items')
def get_items(self, container):
items = Item.objects.filter(container=container)[:500] # Whatever your query may be
serializer = ItemSerializer(instance=items, many=True)
return serializer.data
The one catch is that the SerializerMethodField
is read only.
这篇关于django REST框架 - 嵌套ModelSerializer的有限查询器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!