I am trying to build a list api where comments of the blog post are shown on same api but it generates following error.
Got AttributeError when attempting to get a value for field reviews
on serializer PackageDetailSerializer
.
The serializer field might be named incorrectly and not match any attribute or key on the Package
instance.
Original exception text was: 'Package' object has no attribute 'reviews'.
My models:
class Package(models.Model):
destination = models.ForeignKey(Destination, on_delete=models.CASCADE)
package_name = models.CharField(max_length=255)
featured = models.BooleanField(default=False)
price = models.IntegerField()
duration = models.IntegerField(default=5)
discount = models.CharField(max_length=255, default="15% OFF")
discounted_price = models.IntegerField(default=230)
savings = models.IntegerField(default=230)
special_discount = models.BooleanField(default=False)
rating = models.IntegerField(choices=((1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5))
)
image = models.ImageField(blank=True)
thumbnail = ImageSpecField(source='image',
processors=[ResizeToFill(100, 50)],
format='JPEG',
options={'quality': 60})
content =RichTextField()
highlights = RichTextField()
itinerary = RichTextField()
image_1= models.ImageField(blank=True,null = True)
image_2= models.ImageField(blank=True,null = True)
image_3= models.ImageField(blank=True,null = True)
date_created = models.DateField()
def __str__(self):
return self.package_name
# def is_featured(self):
# return self.featured
class Review(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
package = models.ForeignKey(Package, on_delete=models.CASCADE, related_name='review')
full_name = models.CharField(max_length=255)
review = RichTextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.full_name
class Meta:
ordering = ('created_at',)
My view:
class AllPackageDetailAPIView(RetrieveAPIView):
queryset = Package.objects.all()
serializer_class = PackageDetailSerializer
My serializers:
class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = ['id', 'package', 'full_name', 'review']
class PackageDetailSerializer(serializers.ModelSerializer):
destination = serializers.StringRelatedField()
reviews = ReviewSerializer(many=True)
class Meta:
model = Package
fields = ['id', 'destination', 'package_name', 'image', 'duration', 'featured', 'content', 'highlights',
'image_1', 'image_2', 'image_3', 'itinerary', 'date_created', 'reviews']
My urls:
path('api/allpackages/<int:pk>', views.AllPackageDetailAPIView.as_view(), name='api-package-detail'),