2017-12-18 10 views
0

Ich verwende das Django REST Framework Toolkit mit Django 1.11 und ich versuche die Ergebnisse gegen die URL zu filtern. Hier ist mein Setup:Django REST Framework - Filterung gegen die URL

models.py:

from django.db import models 

class Package(models.Model): 
name = models.CharField(max_length=255, unique=True) 
def __str__(self): 
    return self.name 

serializers.py:

from rest_framework import serializers 
from .models import Package 

class PackageSerializer(serializers.ModelSerializer): 
     class Meta: 
      model = Package 
      fields = ('name',) 

views.py:

from rest_framework import viewsets 
from .models import Package 
from .serializers import PackageSerializer 

class PackageViewSet(viewsets.ReadOnlyModelViewSet): 
    serializer_class = PackageSerializer 
    queryset = Package.objects.all() 

urls.py

from django.conf.urls import url, include 
from django.contrib import admin 
from rest_framework import routers 

router = routers.DefaultRouter() 
router.register(r'package', views.PackageViewSet) 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^api/v1/', include(router.urls)), 
] 

Zur Zeit, als ich diese verwenden kann ich die Ergebnisse durch das ID-Feld filtern:

http://127.0.0.1:8000/api/v1/package/1/ 

Ich hoffe, die Ergebnisse durch das Namensfeld meines Paket Modell statt zu filtern mit diesem:

http://127.0.0.1:8000/api/v1/package/basic/ 

Wie würde ich das erreichen können?

Antwort

1

Setzen Sie das Attribut lookup_field in den Viewset, siehe the documentation.

class PackageViewSet(viewsets.ReadOnlyModelViewSet): 
    serializer_class = PackageSerializer 
    queryset = Package.objects.all() 
    lookup_field = 'name' 
+0

Das ist genau ich bin im Begriff zu antworten. Prost – Satendra

+0

Und ich dachte Google war schnell ... danke für die schnelle Antwort und den Link zu der Dokumentation. – RMP

0

Verwenden Sie filter_fields in Sichten.

filter_fields = ('name',) 

Nachschlag-Feld wird verwendet, um Standard festlegen Lookup es Modellpk

wäre, wenn Sie Ihre URL machen,

my_url/filter_field/ 

lookup_field = "name" gesetzt

, wenn Sie Suche von URL wie,

my_url/?name=something 

müssen Sie filter_fields in Ansichten festlegen.