Multilevel Inner Nested Rest Api

32 views
Skip to first unread message

John Robert

unread,
Sep 25, 2020, 8:42:13 AM9/25/20
to Django REST framework
Hi guys am new to django field .I have a task to complete. 

The requirement,
     1) I have 5 models each model should be inner nested with another model
      2) I need to perform all CRUD operations by using the Rest API tool 
I will provide my code here , please help me to short out this issue 
Models.py


class Musician(models.Model):

    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

    def __unicode__(self):
        return self.first_name


class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE, related_name='album_musician', null=True, blank=True)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

class Place(models.Model):
    alname=models.ForeignKey(Album,on_delete=models.CASCADE,related_name='place_album',null=True,blank=True)
    placename=models.CharField(max_length=50)
    time=models.CharField(max_length=50)

class Use(models.Model):
    pluse=models.ForeignKey(Place,on_delete=models.CASCADE,related_name='use_place',null=True,blank=True)
    Cameramodel=models.CharField(max_length=50)
    byyear=models.DateField()
class Home(models.Model):
    Duse=models.ForeignKey(Use,on_delete=models.CASCADE,related_name='Demo_Use',null=True,blank=True)
    Dname=models.CharField(max_length=50)
    Age=models.IntegerField()

Serializers.py

class HomeSerializer(serializers.ModelSerializer):
    class Meta:
        model=Home
        fields=('id','Duse','Dname','Age')
class UseSerializer(serializers.ModelSerializer):
    Demo_Use=HomeSerializer(many=True)
    class Meta:
        model=Use
        fields=('id','pluse','Cameramodel','byyear','Demo_Use')
class PlaceSerializer(serializers.ModelSerializer):
    use_place = UseSerializer(many=True)
    class Meta:
        model=Place
        fields=('id','alname','placename','time','use_place')

class AlbumSerializer(serializers.ModelSerializer):
    place_album=PlaceSerializer(many=True)
    class Meta:
        model = Album
        fields = ('id', 'artist', 'name', 'release_date', 'num_stars','place_album')


class MusicianSerializer(serializers.ModelSerializer):
    album_musician = AlbumSerializer(many=True)

    class Meta:
        model = Musician
        fields = ('id', 'first_name', 'last_name', 'instrument', 'album_musician')
        lookup_field=id

    def create(self, validated_data):
        albums_data = validated_data.pop('album_musician')
        musician = Musician.objects.create(**validated_data)
        for album_data in albums_data:
            Album.objects.create(artist=musician, **album_data)
        return musician

    def update(self, instance, validated_data):
        albums_data = validated_data.pop('album_musician')
        albums = (instance.album_musician).all()
        albums = list(albums)
        instance.first_name = validated_data.get('first_name', instance.first_name)
        instance.last_name = validated_data.get('last_name', instance.last_name)
        instance.instrument = validated_data.get('instrument', instance.instrument)
        instance.save()

        for album_data in albums_data:
            album = albums.pop(0)
            print('the value',album)
            album.name = album_data.get('name', album.name)
            album.release_date = album_data.get('release_date', album.release_date)
            album.num_stars = album_data.get('num_stars', album.num_stars)
            album.save()
        return instance

views.py 

class MusicianListView(generics.ListCreateAPIView):
    queryset = Musician.objects.all()
    serializer_class = MusicianSerializer


class MusicianView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = MusicianSerializer
    queryset = Musician.objects.all()


class AlbumListView(generics.ListCreateAPIView):
    queryset = Album.objects.all()
    serializer_class = AlbumSerializer


class AlbumView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = AlbumSerializer
    queryset = Album.objects.all()

class PlaceListView(generics.ListCreateAPIView):
    queryset = Place.objects.all()
    serializer_class = PlaceSerializer
class  PlaceView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = PlaceSerializer
    queryset = Place.objects.all()

class UseListView(generics.ListCreateAPIView):
    queryset = Use.objects.all()
    serializer_class = UseSerializer

class  UseView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = UseSerializer
    queryset = Use.objects.all()

class HomeListView(generics.ListCreateAPIView):
    queryset = Home.objects.all()
    serializer_class = HomeSerializer

class  HomeView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = UseSerializer
    queryset = Home.objects.all()
Reply all
Reply to author
Forward
0 new messages