[PYTHON] Lorsque vous souhaitez filtrer avec le framework Django REST

Je crée actuellement une API avec le framework Django REST. Je l'écris en étudiant tous les jours, je vais donc l'écrire ici pour ne pas l'oublier.

■ Ce que vous voulez faire Lorsque je frappe le champ spécifié par la clé étrangère dans le modèle avec URL, je veux l'obtenir en spécifiant la valeur au lieu du numéro d'identification!

Vous trouverez ci-dessous le résultat de Rest qui est renvoyé lorsque vous appuyez sur l'URL.

python


URL:http://127.0.0.1:8000/my_names
{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "my_name": "noge", 
        }
    ]
}
URL:http://127.0.0.1:8000/my_name_rules

{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "my_name": "1", 
            "my_name_rule": "noge is rule.", 
        }
    ]
}

Exemple de ce que vous voulez faire) http://127.0.0.1:8000/my_name_rule/1 <-pas '1' Je veux l'obtenir avec http://127.0.0.1:8000/my_name_rule/noge <- 'noge'


** Sujet principal d'ici ** Aucune modification particulière de models.py.

models.py


from django.db import models 

class MyName(models.Model):
    my_name = models.CharField(max_length=255, unique=True)

    def __unicode__(self):
        return self.my_name       

    class Meta(object):
        db_table = 'my_name'      


class MyNameRule(models.Model):
    my_name = models.ForeignKey(MyName)
    my_name_rule = models.CharField(max_length=255)
                                                                                                                                                                                                                                                                              
    def __unicode__(self):
        return self.my_name_rule       

    class Meta(object):
        db_table = 'my_name_rule'     

serializers.py est également inchangé.

serializers.py


from rest_framework import serializers
from noge.apps.noge.models import MyName
from noge.apps.noge.models import MyNameRule

class MyNameRuleSerializer(serializers.ModelSerializer):

    class Meta(object):
        model = MyNameRule
        fields = ('my_name', 'my_name_rule')

class MyNameSerializer(serializers.ModelSerializer):

    class Meta(object):
        model = MyName
        fields = ('my_name')  

Et dans views.py, créez une classe appelée "MyNameRuleFilterViewSet" pour la classe de filtrage.

views.py



from rest_framework import viewsets
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from noge.apps.noge.models import MyName
from noge.apps.noge.models import MyNameRule
from noge.apps.noge.serializers import MyNameSerializer
from noge.apps.noge.serializers import MyNameRuleSerializer

class MyNameViewSet(viewsets.ModelViewSet):
    queryset = MyName.objects.all()
    serializer_class = MyNameSerializer
    permission_classes = (IsAuthenticated,)

class MyNameRuleViewSet(viewsets.ModelViewSet):
    queryset = MyNameRule.objects.all()
    serializer_class = MyNameRuleSerializer
    permission_classes = (IsAuthenticated,)

class MyNameRuleFilterViewSet(generics.ListAPIView):
    serializer_class = MyNameRuleSerializer
    def get_queryset(self):
        query_my_name = self.kwargs['my_name']
        return MyNameRule.objects.filter(my_name__my_name=query_my_name)

Enfin, spécifiez l'url de la classe de filtre dans urls.py et vous avez terminé.

urls.py


from rest_framework import routers
from noge.apps.noge import views
from noge.apps.noge.views import MyNameRuleFilterViewSet

router = routers.DefaultRouter(trailing_slash=False)
router.register(r'my_names', views.MyNameViewSet)
router.register(r'my_name_rules', views.MyNameRuleViewSet)

urlpatterns = patterns('noge.apps.noge.views',
                       url(r'^v1/my_name_rules/(?P<my_name>\w+)/$',MyNameRuleFilterViewSet.as_view()),
                       url(r'^v1/', include(router.urls)),
                       url(r'^$', 'index', name='index'),)

Vous devriez pouvoir le faire! C'est tout (`・ ω ・ ´) ゞ

Recommended Posts

Lorsque vous souhaitez filtrer avec le framework Django REST
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Choses à faire lorsque vous commencez à développer avec Django
[Django] Utiliser MessagePack avec le framework Django REST
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations
Créer une API RESTful avec Django Rest Framework
CRUD GET avec Nuxt & Django REST Framework ②
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
Lorsque vous souhaitez envoyer un objet avec des requêtes à l'aide de flask
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Lorsque vous souhaitez ajuster l'intervalle de l'échelle de l'axe avec APLpy
Un référentiel essentiel à utiliser lorsque vous souhaitez l'essayer avec ansible
Lorsque vous souhaitez remplacer une colonne par une valeur manquante (NaN) colonne par colonne
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
Comment gérer les caractères déformés dans json de Django REST Framework
CRUD PUT, DELETE avec Nuxt & Django REST Framework
Lorsque vous souhaitez mettre à jour le pilote Chrome.
Framework Django REST Un peu utile à savoir.
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Bases du framework Django REST
Astuces Django Rest Framework
AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django
Modèle de bonnes pratiques personnelles à utiliser lorsque vous souhaitez créer MVP avec Flask
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
Si vous voulez créer un bot discord avec python, utilisons un framework
Créer une application Todo avec Django REST Framework + Angular
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
Essayez de créer une application Todo avec le framework Django REST
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Liens pour faire ce que vous voulez avec Sublime Text
[Django Rest Framework] Personnalisez la fonction de filtre à l'aide de Django-Filter
Lorsque vous voulez plt.save dans l'instruction for
Points à garder à l'esprit lors de la migration avec Django
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Lorsque la variable que vous souhaitez utiliser comme exposant dans matplotlib comporte deux caractères ou plus
Bloc d'achoppement du framework Django REST
Gestion des fichiers statiques lors du déploiement en production avec Django
Éliminez les erreurs qui se produisent lors de l'utilisation de Django REST Swagger avec Django 3.0
Connaissances à connaître lors de la programmation de concours avec Python2
La première API à créer avec le framework Python Djnago REST
Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Je veux créer un éditeur de blog avec l'administrateur de django
Comment résoudre la protection CSRF lors de l'utilisation d'AngularJS avec Django
Lorsque vous souhaitez utiliser python 2.x sur Gentoo Linux moderne
Lorsque vous souhaitez lancer une commande UNIX sur Python
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
Opération utile lorsque vous souhaitez résoudre tous les problèmes dans plusieurs langages de programmation avec Codewars
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python