我尝试通过课程自己的字段“名称”而不是 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 来查询课程。 查询这个的路径应该是什么?
答案 0 :(得分: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