[英]Django REST Framework - Filtering against the URL
我正在將Django REST Framework工具包與Django 1.11結合使用,並且嘗試根據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)),
]
當前,當我使用它時,我可以按id字段過濾結果:
http://127.0.0.1:8000/api/v1/package/1/
我希望通過包裝模型的名稱字段來過濾結果,而不是使用以下方法:
http://127.0.0.1:8000/api/v1/package/basic/
我將如何做到這一點?
在lookup_field
集中設置lookup_field
屬性,請參閱文檔 。
class PackageViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = PackageSerializer
queryset = Package.objects.all()
lookup_field = 'name'
在視圖中使用filter_fields。
filter_fields = ('name',)
查找字段用於默認設置查找,它將是模型 pk
如果您想輸入網址,
my_url/filter_field/
設置lookup_field = "name"
如果您要從類似的網址進行搜索,
my_url/?name=something
您需要在視圖中設置filter_fields
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.