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.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()