【问题标题】:How to use query params to filter objects in DRF?如何使用查询参数过滤 DRF 中的对象?
【发布时间】:2021-07-24 22:27:16
【问题描述】:

我尝试通过其自己的字段“名称”而不是 pk 来查询课程。 查询时应该是什么路径?

所有基本的 Cruds 和 pk 查询都可以在这段代码中正常工作。

这里我附上了所有相关文件:

models.py

from django.db import models

# Teacher = opettaja in Finnish
class Opettaja(models.Model):
    nimi = models.CharField(max_length=100, default='')
    puhelin = models.CharField(max_length=20, default='')

    class Meta:
        ordering = ['nimi']

# Course = kurssi in Finnish
class Kurssi(models.Model):
    nimi = models.CharField(max_length=100, default='')
    laajuus = models.IntegerField()
    opettaja = models.ForeignKey(Opettaja, on_delete=models.CASCADE)

    class Meta:
        ordering = ['nimi']

serializers.py

from rest_framework import serializers
from .models import Opettaja, Kurssi

class OpettajaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Opettaja
        fields = ['id', 'nimi', 'puhelin']

class KurssiSerializer(serializers.ModelSerializer):
    class Meta:
        model = Kurssi
        fields = ['id', 'nimi', 'laajuus', 'opettaja']

urls.py

from django.urls import include,path
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(r"opettaja", views.OpettajaViewSet)
router.register(r"kurssi", views.KurssiViewSet, "nimi")

# My app is simply named as app in this project
urlpatterns = [
    path("api/", include((router.urls, "app"))),
]

views.py

from rest_framework import viewsets from .models import Opettaja, Kurssi from .serializers import OpettajaSerializer, KurssiSerializer

class OpettajaViewSet(viewsets.ModelViewSet):
    queryset = Opettaja.objects.all()
    serializer_class = OpettajaSerializer

class KurssiViewSet(viewsets.ModelViewSet):
    queryset = Kurssi.objects.all()
    serializer_class = KurssiSerializer
    def get_queryset(self):
        queryset = Kurssi.objects.all()
        nimi = self.request.query_params.get("nimi")
        if nimi is not None:
            nimi = nimi
        return queryset

我尝试通过其自己的字段“名称”而不是 pk 来查询课程。 查询时应该是什么路径?

【问题讨论】:

    标签: python django django-rest-framework django-rest-viewsets


    【解决方案1】:

    试试这个

    def get_queryset(self):
        queryset = Kurssi.objects.all()
        nimi = self.request.query_params.get("nimi")
        if nimi is not None:
            queryset = queryset.filter(nimi=nimi)
        return queryset
    

    您不必为此更改 URL 路径,URL 应该类似于

    api/kurssi?nimi=some_name

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2021-12-03
      • 2021-09-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多