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.

Reply via email to