如何过滤Django REST Api



我有url:

path('api/theatre_screening_list/<int:theatre>', cinema.apiviews.TheatreScreeningList.as_view()),

with a view:

class TheatreScreeningList(ListAPIView):
queryset = Screening.objects.all()
serializer_class = ScreeningSerializer
filter_backends = (DjangoFilterBackend,)
filterset_fields = ("screen", "film", "date", "time")

和序列化器:

class ScreeningSerializer(serializers.ModelSerializer):
class Meta:
model = Screening
fields = ('id', 'screen','film','date','time')
def to_representation(self, instance):
data = super().to_representation(instance)
screen = Screen.objects.get(id=data['screen'])
data['screen'] = f"{screen}"
film = Film.objects.get(id=data['film'])
data['film'] = f"{film}"
return data

筛选类为:

class Screening(models.Model):
screen = models.ForeignKey(Screen, on_delete=models.CASCADE, related_name='allocation')
film = models.ForeignKey(Film, on_delete=models.CASCADE, related_name='screening')
date = models.DateField()
time = models.TimeField()
def __str__(self):
return f"{self.screen.theatre.name}, {self.screen.name}, {self.date}, {self.time}, {self.film.title}, {self.film.rating}"

我不确定在哪里或如何过滤查询,以便我只接收url中指定的剧院的数据。有谁能告诉我怎么做吗?由于

你可以重写get_queryset()来过滤url:

class TheatreScreeningList(ListAPIView):
serializer_class = ScreeningSerializer
filter_backends = (DjangoFilterBackend,)
filterset_fields = ("screen", "film", "date", "time")
def get_queryset(self)
theatre_id= self.kwargs['theatre']
return Screening.objects.filter(screen__theatre__pk=theatre_id)

最新更新