2012-12-25 13 views
19

मूल रूप से मैं इस तरह मॉडल:कैसे Django-आराम-ढांचे में संबंध के माध्यम से साथ ManytoManyField के साथ काम करने

class Playlist(models.Model): 
    key = models.CharField(max_length=255,blank=True, unique=True) 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=200) 
    pub_date = models.DateTimeField(auto_now_add=True) 
    videos = models.ManyToManyField(Video, through='PlaylistVideo') 

class PlaylistVideo(models.Model): 
    playlist = models.ForeignKey(Playlist) 
    video = models.ForeignKey(Video) 
    position = models.IntegerField() 

class Video(models.Model): 
    title = models.CharField(max_length=255,blank=True) 
    description = models.TextField(blank=True) 
    thumb = models.URLField(blank=True) 
    duration = models.IntegerField(default=0) 

अब मैं एक API इस तरह प्लेलिस्ट वापस करना चाहते ... लेकिन वीडियो के अनुसार क्रमबद्ध किया जाना चाहिए PlaylistVideo मॉडल

{ 
     "key": "h8x3", 
     "title": "First Playlist", 
     "pub_date": "2012-10-11T17:00:26Z", 
     "videos": [ 
      { 
       .... 
      }, 
      { 
       .... 
      } 
     ] 
    }, 

मैं इसके बारे में कैसे मिल गया चाहिए में स्थिति?

उत्तर

4

आप इस तरह यह कर सकते हैं:

class PlaylistVideoList(generics.ListCreateAPIView): 
    serializer_class = PlaylistVideoSerializer 
    queryset = PlaylistVideo.objects.all().order_by('position') 
serializers.py में

:

class PlaylistVideoSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = PlaylistVideo 
7

नहीं भी सुनिश्चित करें कि आपने अपनी समस्या का समाधान करने में कामयाब रहा है, लेकिन मैं इस पर आया हूं

इस तरह एक कस्टम serializer बनाने:

class PlaylistVideoSerializer(serializers.HyperlinkedModelSerializer): 
    title = serializers.ReadOnlyField(video.title) 
    description = serializers.ReadOnlyField(video.description) 
    thumb = serializers.ReadOnlyField(video.thumb) 
    duration = serializers.ReadOnlyField(video.duration) 

    class Meta: 
     # your associative entity here 
     model = PlaylistVideo 
     fields = ('title', 'description', 'thumb', 'duration') 

यहाँ, मैं आप वीडियो के तहत सभी क्षेत्रों प्रदर्शित करना चाहते हैं यह सोचते हैं रहा हूँ स्वयं, और यह कुछ इस तरह कर रही द्वारा की तरह काम करने के लिए प्रबंधित इकाई/तालिका। अपनी जरूरतों/पसंदों को समायोजित करने के लिए स्वतंत्र महसूस करें।

फिर, तुम सब करने की जरूरत है इस

class PlaylistSerializer(serializers.ModelSerializer): 
    videos = PlaylistVideoSerializer(source='playlistvideo_set', many=True) 
    class Meta: 
     model = Playlist 
     fields = ('key', 'title', 'pub_dates', 'videos') 

नोट: हमेशा सुनिश्चित करें कि स्रोत साहचर्य संस्था के लिए संदर्भित किया गया है। अन्यथा आपको खाली जेसन की एक सूची मिल जाएगी।

आशा है कि इससे किसी भी मुद्दे का सामना करने में किसी को भी मदद मिलेगी।

+0

यदि आप प्लेलिस्ट के माध्यम से वीडियो बनाने और/या अपडेट करने में सक्षम होना चाहते हैं तो संशोधित करने के बारे में कोई भी विचार? यह इस सेट अप के साथ काम नहीं कर रहा है। – getup8

+0

ने अपना खुद का प्रश्न उत्तर दिया। आपको अपने स्वयं के निर्माण और अद्यतन विधियों की आवश्यकता है और आपको गैर-रीडऑनलीफिल्ड्स का उपयोग करने की आवश्यकता है। – getup8

संबंधित मुद्दे