[PYTHON] Wenn Sie mit dem Django REST-Framework filtern möchten

Ich erstelle derzeit eine API mit dem Django REST-Framework. Ich schreibe es jeden Tag während des Studiums, also werde ich es hier schreiben, damit ich es nicht vergesse.

■ Was Sie tun möchten Wenn ich das vom Fremdschlüssel im Modell angegebene Feld mit der URL treffe, möchte ich es erhalten, indem ich den Wert anstelle der ID-Nummer gebe!

Unten sehen Sie das Ergebnis von Rest, das zurückgegeben wird, wenn Sie auf die URL klicken.

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.", 
        }
    ]
}

Beispiel für das, was Sie tun möchten) http://127.0.0.1:8000/my_name_rule/1 <-not '1' Ich möchte es mit http://127.0.0.1:8000/my_name_rule/noge <- 'noge' erhalten


** Hauptthema von hier ** Keine besondere Änderung an 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 ist ebenfalls unberührt.

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')  

Erstellen Sie in views.py eine Klasse mit dem Namen "MyNameRuleFilterViewSet" für die Filterklasse.

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)

Geben Sie abschließend die URL der Filterklasse in urls.py an und fertig.

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'),)

Sie sollten dazu in der Lage sein! Das war's (`・ ω ・ ´) ゞ

Recommended Posts

Wenn Sie mit dem Django REST-Framework filtern möchten
Manchmal möchten Sie mit DRF (Django REST Framework) auf View information from Serializer zugreifen.
Django REST Framework mit Vue.js
Melden Sie sich mit dem Django Rest Framework an
Einstellungen, wenn Sie Python-Mecab mit Travis ausführen möchten
Dinge zu tun, wenn Sie anfangen, sich mit Django zu entwickeln
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
[Django] Memorandum, wenn Sie asynchron kommunizieren möchten [Python3]
[AWS] Was tun, wenn Sie mit Lambda pfeifen möchten?
Verwenden Sie aggdraw, wenn Sie mit Kissen schön zeichnen möchten
Wenn Sie die Anfangsdaten von Django mit Relationen registrieren möchten
Erstellen Sie eine RESTful-API mit dem Django Rest Framework
CRUD GET mit Nuxt & Django REST Framework ②
CRUD POST mit Nuxt & Django REST Framework
CRUD GET mit Nuxt & Django REST Framework ①
Wenn Sie ein Objekt mit Anforderungen mithilfe der Flasche senden möchten
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Wenn Sie das Intervall der Achsenskala mit APLpy anpassen möchten
Ein Gist-Repository, das Sie verwenden können, wenn Sie es mit ansible ausprobieren möchten
Wenn Sie eine Spalte spaltenweise durch einen fehlenden Wert (NaN) ersetzen möchten
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
CRUD PUT, DELETE mit Nuxt & Django REST Framework
Wenn Sie den Chrome-Treiber aktualisieren möchten.
Django REST Framework Ein wenig nützlich zu wissen.
Implementierung der Authentifizierungsfunktion in Django REST Framework mit djoser
Grundlagen des Django REST-Frameworks
Tipps zum Django Rest Framework
AssertNumQueries ist nützlich, wenn Sie N + 1-Abfragen einfach mit django testen möchten
Persönliche Best-Practice-Vorlage, die verwendet werden soll, wenn Sie MVP mit Flask erstellen möchten
So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm
[OpenCV] Wenn Sie überprüfen möchten, ob es mit imread richtig gelesen wird
Wenn Sie einen Discord-Bot mit Python erstellen möchten, verwenden wir ein Framework
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Weitere neue Benutzerauthentifizierungsmethoden mit Django REST Framework
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Links, um mit Sublime Text zu tun, was Sie wollen
[Django Rest Framework] Passen Sie die Filterfunktion mit Django-Filter an
Wenn Sie in der for-Anweisung plt.save möchten
Dinge, die Sie bei der Migration mit Django beachten sollten
Implementieren Sie hierarchische URLs mit drf-verschachtelten Routern im Django REST-Framework
Wenn die Variable, die Sie in Matplotlib als hochgestellt verwenden möchten, aus zwei oder mehr Zeichen besteht
Django REST Framework Stolperstein
Umgang mit statischen Dateien bei der Bereitstellung in der Produktion mit Django
Beseitigen Sie Fehler, die bei der Verwendung von Django REST Swagger mit Django 3.0 auftreten
Kenntnisse, die Sie beim Programmieren von Wettbewerben mit Python2 benötigen
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
So lösen Sie den CSRF-Schutz bei Verwendung von AngularJS mit Django
Wenn Sie python2.x unter modernem Gentoo Linux verwenden möchten
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Ich kenne? Datenanalyse mit Python oder Dingen, die Sie mit numpy verwenden möchten, wenn Sie möchten
Nützliche Operation, wenn Sie alle Probleme in mehreren Programmiersprachen mit Codewars lösen möchten
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten