如何解决如何使用查询参数过滤 DRF 中的对象?
我尝试通过课程自己的字段“名称”而不是 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','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 来查询课程。 查询这个的路径应该是什么?
解决方法
试试这个
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。