Je veux obtenir le paramètre de corps de l'API dans ma vue. Je souhaite appliquer un filtre de recherche. J'utilise self.request.GET.get ('query')
mais cela donne toujours none
. Comment puis-je obtenir le paramètre du corps comme du facteur? J'envoie requête: Active
dans le corps. Mais je ne comprends pas
class JobsListAPIView(generics.ListAPIView): serializer_class = JobListSerialzer # pagination_class = ListLimitOffsetPagination permission_classes = [UserIsAuthenticated] def get_queryset(self, *args, **kwargs): # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id) qs = Jobs.objects.exclude(job_is_deleted = True).filter( job_company = self.request.auth.application.company ) query = self.request.GET.get('query') print('query: ', request.data) if query: qs = qs.filter(job_status=query) return qs
3 Réponses :
Pour obtenir les paramètres du corps, je suppose que vous utilisez la méthode POST pour demander l'API. Obtenir les données POST est aussi simple que self.request.POST.get('query')
Dans Django pur, le moyen d'obtenir le contenu du body serait d'utiliser request.POST
, et d'obtenir les paramètres de requête serait d'utiliser le request.GET . Puisqu'il semble que vous utilisez la vue du cadre de repos Django, il est recommandé d'utiliser à la place ses request.data
et request.query_params
.
En supposant que le facteur envoie les données correctement formaté, dans ce cas vous pouvez alors utiliser:
query = self.request.data.get("query")
Votre problème réel ne semble pas prendre un paramètre de requête (données de corps).
mais vous ne le passez pas correctement.
Vous devez passer / your-url /? Query = Active
(remplacé: with =).
lorsque vous passez la requête: Active, il prend toute la "requête: Active" comme une seule clé dans le corps.
Quelle est votre URL? Cela devrait être quelque chose comme example.com/jobs?query ** = ** Active. Dans votre exemple, vous dites query **: ** Active.