Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架-根据URL进行过滤_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django REST框架-根据URL进行过滤

Python Django REST框架-根据URL进行过滤,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在Django 1.11中使用Django REST框架工具包,并尝试根据url过滤结果。以下是我的设置: 型号.py: from django.db import models class Package(models.Model): name = models.CharField(max_length=255, unique=True) def __str__(self): return self.name from rest_framework import seriali

我正在Django 1.11中使用Django REST框架工具包,并尝试根据url过滤结果。以下是我的设置:

型号.py

from django.db import models

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

class PackageSerializer(serializers.ModelSerializer):
      class Meta:
            model = Package
            fields = ('name',)
from rest_framework import viewsets
from .models import Package
from .serializers import PackageSerializer

class PackageViewSet(viewsets.ReadOnlyModelViewSet):
     serializer_class = PackageSerializer
     queryset = Package.objects.all()
序列化程序.py

from django.db import models

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

class PackageSerializer(serializers.ModelSerializer):
      class Meta:
            model = Package
            fields = ('name',)
from rest_framework import viewsets
from .models import Package
from .serializers import PackageSerializer

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

from django.db import models

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

class PackageSerializer(serializers.ModelSerializer):
      class Meta:
            model = Package
            fields = ('name',)
from rest_framework import viewsets
from .models import Package
from .serializers import PackageSerializer

class PackageViewSet(viewsets.ReadOnlyModelViewSet):
     serializer_class = PackageSerializer
     queryset = Package.objects.all()
url.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\u字段
属性,请参阅


在视图中使用过滤器字段

filter_fields = ('name',)
lookup字段用于设置默认的lookup,它将是model
pk

如果您希望创建您的URL

my_url/filter_field/
设置
lookup\u field=“name”

如果您希望从URL进行搜索,例如

my_url/?name=something

你需要在视图中设置过滤字段。

我认为谷歌很快。。。感谢您的快速回复和文档链接。
filter_fields = ('name',)