我有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)