Ошибка атрибутов: Объект не имеет атрибутов при попытке обновить 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)