【问题标题】:Django REST Framework - Filtering against the URLDjango REST Framework - 过滤 URL
【发布时间】:2017-12-18 17:41:34
【问题描述】:

我在 Django 1.11 中使用 Django REST Framework 工具包,并尝试根据 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/

我怎样才能做到这一点?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    在视图集中设置lookup_field属性,见the documentation

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

    【讨论】:

    • 我认为 Google 速度很快...感谢您的快速回复和文档链接。
    【解决方案2】:

    在视图中使用 filter_fields。

    filter_fields = ('name',)
    

    lookup 字段用于设置查找,默认为 model pk

    如果您想创建您的网址,

    my_url/filter_field/
    

    设置lookup_field = "name"

    如果你想从 URL 中搜索,

    my_url/?name=something
    

    您需要在视图中设置filter_fields

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2019-04-19
      • 1970-01-01
      • 2021-06-25
      • 2013-05-21
      • 1970-01-01
      • 2014-02-26
      • 2018-10-03
      • 2018-08-07
      相关资源
      最近更新 更多