2014-12-19 31 views
0

當用戶進入http://127.0.0.1:8000/movies/,我不想顯示Showtimes
但是當用戶進入http://127.0.0.1:8000/movies/1/,顯示它。Django的restframework連載顯示

我想問是否有辦法做到這一點?
我現在使用的方法是寫入2 ModelSerializer來顯示它。
請指導我。謝謝!!

這是我的原代碼(而不是2 ModelSerializer方法)

urls.py:

urlpatterns = patterns(
    '', 
    url(r'^movies/$', MovieList.as_view(), name='movie-list'), 
    url(r'^movies/(?P<pk>[0-9]+)/$', MovieDetail.as_view(), name='movie-detail'),  

這是我的views.py:

class MovieMixin(object): 
    queryset = Movie.objects.all() 
    serializer_class = MovieSerializer 

class MovieFilter(django_filters.FilterSet): 
    class Meta: 
     model = Movie 
     fields = ['which_run',] 

class MovieList(MovieMixin, generics.ListAPIView): 
    filter_class = MovieFilter 

class MovieDetail(MovieMixin, generics.RetrieveAPIView): 
    pass 

這是我的序列化。 py

class MovieSerializer(serializers.ModelSerializer): 
     class Meta: 
     model = Movie 
     fields = ('id', 'title','Showtimes',) 

回答

0

你可以使用兩個串行器通過串行器中的get_serializer_class方法替換串行器。這將適用於所有通用視圖,包括ViewSet實例。就你而言,你也可以用自定義序列化器在細節視圖上覆蓋serializer_class

class MovieMixin(object): 
    queryset = Movie.objects.all() 

class MovieList(MovieMixin, generics.ListAPIView): 
    filter_class = MovieFilter 
    serializer_class = MovieSerializer 

class MovieDetail(MovieMixin, generics.RetrieveAPIView): 
    serializer_class = MovieDetailSerializer 

也有插件,讓你做到這一點,最引人注目的是一個included with drf-extensions

這些都將需要一個新的序列化器,將只處理詳細視圖表示。

class MovieSerializer(serializers.ModelSerializer): 
     class Meta: 
     model = Movie 
     fields = ('id', 'title',) 

class MovieDetailSerializer(MovieSerializer): 
     class Meta(MovieSerializer.Meta: 
     fields = MovieSerializer.Meta.fields + ('Showtimes',) 

這將允許您對列表視圖和詳細視圖有兩個不同的序列化響應。

+0

非常感謝!我學到了很多 – user2492364 2014-12-21 05:48:00

相關問題