更新嵌套字段

2024-04-20 15:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法更新嵌套对象字段中的对象。在这里,我无法从电影模型更新name。这是我的型号.py地址:

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

以及序列化程序.py你知道吗

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 update(self, instance, validated_data):
        instance.movie.name = validated_data.get('movie.name', instance.movie.name)
        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.save()

        return instance

Tags: instancenametruesourcedatagetmodelsmovie
1条回答
网友
1楼 · 发布于 2024-04-20 15:03:22

您没有对相关对象调用save

def update(self, instance, validated_data):
    instance.movie.name = validated_data.get('movie', {}).get('name') or instance.movie.name 
    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)
    # here
    instance.movie.save()
    instance.save()

    return instance

相关问题 更多 >