Ошибка атрибутов: Объект не имеет атрибутов при попытке обновить manytoo

Ошибка атрибута: Объект не имеет атрибутов "avg_rating"

Ошибка возникает при попытке обновить поле ManytooOne в views.py perform_create func.

Я пытаюсь обновить avg_rating, который является экземпляром модели Review, каждый раз, когда получен комментарий. мой обзор связан с watchlist через внешний ключ.

Вот мой models.py

class WatchList(models.Model):
    title = models.CharField(max_length=50)
    storyline = models.CharField(max_length=200)
    active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

class Review(models.Model):
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = models.PositiveIntegerField(validators = [MinValueValidator(1), MaxValueValidator(5)])
    comment = models.CharField(max_length=200, null=True)
    watchlist = models.ForeignKey(WatchList, on_delete=models.CASCADE, related_name="reviews")
    avg_rating = models.FloatField(default=0)
    num_rating = models.IntegerField(default=0)
    active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.comment

serializer.py

class ReviewSerializer(serializers.ModelSerializer):
    username = serializers.StringRelatedField(read_only=True)
    
    class Meta:
        model = Review
        exclude = ["watchlist"]
    


class WatchListSerializer(serializers.ModelSerializer):
    ### using relation serializer to list all the reviews in a movie 
    reviews = ReviewSerializer(many=True, read_only=True)

    class Meta:
        model = WatchList
        fields = "__all__"

views.py

class ReviewCreateView(generics.CreateAPIView):
    serializer_class = ReviewSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        return Review.objects.all()

    def perform_create(self, serializer):
        ##posting the comment in a movie using movies primary key
        primary_key = self.kwargs.get("pk")
        watchlist = WatchList.objects.get(pk=primary_key)

        #NOt allowing the same user to comment on the same movie twice
        username = self.request.user
        review_queryset = Review.objects.filter(watchlist=watchlist, username=username)
        if review_queryset.exists():
            raise ValidationError("You cannot comment on the same movie Twice")

        ##NOTE: want to updated this section
        if watchlist.avg_rating == 0:
            watchlist.avg_rating = serializer.validated_data['avg_rating']
        else:
            watchlist.avg_rating = (watchlist.avg_rating + serializer.validated_data['avg_rating'])/2

        watchlist.num_rating += 1
        watchlist.avg_rating.save()
        serializer.save(watchlist=watchlist, username=username)
Вернуться на верх