Home > OS >  Django Rest Framework filtering results displayed by serializer in a Model.objects.all() query
Django Rest Framework filtering results displayed by serializer in a Model.objects.all() query

Time:10-12

I am trying to query my entire user database but only add the user to the json response if the field account_type is "supplier", right now it is just adding every user to the json response

models.py

class UserProfile(models.Model):
    <omitted>
    account_type = models.CharField(max_length=200, default=None)
    ...<omitted>

views.py

class getusers(viewsets.ModelViewSet):
    # Database model
    queryset = UserProfile.objects.all()
    # Serializer - this performs the actions on the queried database entry
    serializer_class = GetUsersSerializer

serializers.py

class GetUsersSerializer(serializers.ModelSerializer):    
    class Meta:
        model=UserProfile
        fields=['user','company','email','pk', 'account_type']

current JSON response

[
    {
        "user": 1,
        "company": "kyle att",
        "email": "<omitted>",
        "pk": 1,
        "account_type": "user"
    },
    {
        "user": 2,
        "company": "kyle google",
        "email": "<omitted>",
        "pk": 2,
        "account_type": "supplier"
    }
]

desired JSON response

[
    {
        "user": 2,
        "company": "kyle google",
        "email": "<omitted>",
        "pk": 2,
        "account_type": "supplier"
    }
]

CodePudding user response:

Change the 'queryset' as below:

queryset = UserProfile.objects.filter(account_type='supplier')

CodePudding user response:

Found the answer in django rest framework docs if anyone is looking:

https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend

  • Related