Here is my model:
class Movie(models.Model):
name = models.CharField(max_length=800, unique=True)
imdb_rating = models.IntegerField(null=True)
movie_choice = (
('Act', 'Action'),
...............
)
movie_type = models.CharField(max_length=3, choices=movie_choice)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Hiren(models.Model):
movie = models.ForeignKey(Movie)
watched_full = models.BooleanField(default=True)
rating = models.IntegerField()
source = models.CharField(max_length=500, null=True)
watched_at = models.DateField()
quality_choice = (
('HD', 'HD'),
..............
)
video_quality = models.CharField(max_length=3, choices=quality_choice)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
and my serializer:
class MovieSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = '__all__'
class HirenSerializer(serializers.ModelSerializer):
movie = MovieSerializer()
class Meta:
model = Hiren
fields = ('movie', 'id', 'watched_full', 'rating', 'source',
'video_quality', 'watched_at')
def create(self, validated_data):
movie_data = validated_data.pop('movie')
movie = Movie.objects.create(**movie_data)
hiren = Hiren.objects.create(movie=movie, **validated_data)
return hiren
def update(self, instance, validated_data):
print('hit') # doesn't print anything on put type request
movie_name = validated_data.get('movie', {}).get('name')
# print(movie_name)
# print(instance.movie.name)
if movie_name != instance.movie.name:
instance.movie.name = movie_name
# instance.movie.name = validated_data.get('movie', {}).get('name')
instance.movie.imdb_rating = validated_data.get('movie', {}).get(
'imdb_rating')
instance.movie.movie_type = validated_data.get('movie', {}).get(
'movie_type')
instance.watched_full = validated_data.get('watched_full', instance.
watched_full)
instance.rating = validated_data.get('rating', instance.rating)
instance.source = validated_data.get('source', instance.source)
instance.video_quality = validated_data.get('video_quality',
instance.video_quality)
instance.watched_at = validated_data.get('watched_at', instance.
watched_at)
# instance.movie.save()
instance.save()
return instance
When I try to update the data without changing the "name" its throws an
error:
{ "movie": { "name": [ "movie with this name already exists." ] } }
So I try to fix this via those lines:
if movie_name != instance.movie.name:
instance.movie.name = movie_name
But it turns out that put request doesn't hit the update method at all.
--
You received this message because you are subscribed to the Google Groups
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.