如何在视图集中获取自定义列表

时间:2016-11-11 17:05:49

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

我们如何在ModelViewSet中编写一个获取数据库中不同记录列表的函数?

假设我们有这个模型。

class Animal(models.Model):

    this_id = models.CharField(max_length=25)
    name = models.CharField(max_length=25)
    species_type = models.CharField(max_length=25)
    ...

和序列化程序

class AnimalSerializer(serializers.ModelSerializer):

    class Meta:
        model = Animal
        fields = (
            'this_id',
            'name', 
            'species_type', 
            ...,
        )
        read_only_fields = ('id', 'created_at', 'updated_at')

和ViewSet。

class AnimalViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` actions.
    """
    queryset = Animal.objects.all()
    serializer_class = AnimalSerializer
  

我发现这个link很有用,比如像@list_route()这样的装饰器   但我无法理解。

我想从ViewSet获取不同Animal.species_type记录的列表。请帮忙。

1 个答案:

答案 0 :(得分:1)

过滤有几种不同的选择。您可以通过请求/animals?species_type=MusMusculus发送物种类型,并在您浏览视图中的get_queryset()方法时引用它。

在你看来

def get_queryset(self):
    species = self.request.query_params.get('species_type', None)
    if species is not None:
        queryset = Animals.objects.all().distinct('species_type')
        species = SpeciesSerializer(data=queryset)
    return queryset

串行

from rest_framework import serializers
class Species(serializers.Serializer):
    species_type = serializers.Charfield()

或者,您可以采用django过滤器框架http://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend