簡體   English   中英

Django REST Framework-根據URL過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM