Пожалуйста, рассмотрите эти три модели:
class Movie(models.Model):
name = models.CharField(max_length=254, unique=True)
language = models.CharField(max_length=14)
synopsis = models.TextField()
class TimeTable(models.Model):
date = models.DateField()
class Show(models.Model):
day = models.ForeignKey(TimeTable)
time = models.TimeField(choices=CHOICE_TIME)
movie = models.ForeignKey(Movie)
class Meta:
unique_together = ('day', 'time')
И каждый из них имеет свои сериализаторы:
class MovieSerializer(serializers.HyperlinkedModelSerializer):
movie_id = serializers.IntegerField(read_only=True, source="id")
class Meta:
model = Movie
fields = '__all__'
class TimeTableSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = TimeTable
fields = '__all__'
class ShowSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Show
fields = '__all__'
И их маршрутизаторы
router.register(r'movie-list', views.MovieViewSet)
router.register(r'time-table', views.TimeTableViewSet)
router.register(r'show-list', views.ShowViewSet)
Теперь я хотел бы получить все объекты TimeTable (т.е. список дат), путем фильтрации всех объектов Show определенным объектом фильма. Этот код, похоже, работает и получает список, как я хочу.
m = Movie.objects.get(id=request_id)
TimeTable.objects.filter(show__movie=m).distinct()
Но я понятия не имею, как использовать это в django rest framework? Я пробовал делать это (я уверен, что это неправильно), и я получаю сообщение об ошибке:
views.py:
class DateListViewSet(viewsets.ModelViewSet, movie_id):
movie = Movie.objects.get(id=movie_id)
queryset = TimeTable.objects.filter(show__movie=movie).distinct()
serializer_class = TimeTableSerializer
urls.py:
router.register(r'date-list/(?P<movie_id>.+)/', views.DateListViewSet)
Ошибка:
класс DateListViewSet (viewsets.ModelViewSet, movie_id): NameError: имя 'movie_id' не определено
Как я могу фильтровать использование просмотров в django rest framework? Или, если есть другой предпочтительный способ, пожалуйста, перечислите его. Спасибо.