2014-05-15 4 views
1

나는 재생 목록 모델과 트랙 모델을 가지고 있습니다.중첩 모델/경로를 구현하는 방법은 무엇입니까?

class Playlist(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    user = models.ForeignKey(User, related_name="playlists") 

class Track(models.Model): 
    playlist = models.ForeignKey(Playlist, related_name="tracks") 
    track_id = models.CharField(max_length=50) 

그리고 시리얼 :

class TrackSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Track 
     fields = ("id", "track_id") 

class PlaylistSerializer(serializers.ModelSerializer): 
    user = serializers.Field(source="user.username") 
    tracks = TrackSerializer(many=True) 
    class Meta: 
     model = Playlist 
     fields = ("id", "created", "user", "tracks") 

내가 나를 playlists/<playlist_id>에서 재생 목록의 트랙을 나열하고 같은 URL에서 트랙을 만들 수 있습니다 (바람직 viewsets 사용) 뷰를 만드는 방법에 대해 갈 것이라고 어떻게?

나는 위 URL로 이동할 때 현재 non_field_errors을 얻습니다.

문서에서 이러한 중첩 된 뷰를 수행하는 방법에 대해 많이 알 수 없습니다. 감사.

답변

2

ues drf-nested-routers (https://github.com/alanjds/drf-nested-routers)입니다.

코드의 유일한 흥미로운 부분은 pre_save 메서드의 트랙 재생 목록을 TrackViewSet으로 설정하는 것입니다.

views.py

class TrackViewSet(viewsets.ModelViewSet): 
    queryset = Track.objects.all() 
    serializer_class = TrackSerializer 

    def pre_save(self, obj): 
     obj.playlist = Playlist.objects.get(pk=self.kwargs['playlist_pk']) 


class PlaylistViewSet(viewsets.ModelViewSet): 
    queryset = Playlist.objects.all() 
    serializer_class = PlaylistSerializer 

    def pre_save(self, obj): 
     obj.user = self.request.user 

urls.py

from django.conf.urls import patterns, url, include 

from rest_framework_nested import routers 

from . import views 

router = routers.SimpleRouter() 

router.register(r'playlists', views.PlaylistViewSet) 

playlists_router = routers.NestedSimpleRouter(router, r'playlists', lookup='playlist') 
playlists_router.register(r'tracks', views.TrackViewSet) 

urlpatterns = patterns('', 
    url(r'^', include(router.urls)), 
    url(r'^', include(playlists_router.urls)), 
) 
+0

덕분에, 마치 마법처럼 작동합니다! –

관련 문제