【发布时间】:2021-03-02 13:24:35
【问题描述】:
我正在尝试构建一个列表 api,其中博客文章的 cmets 显示在同一个 api 上,但它会产生以下错误。
尝试在序列化程序 PackageDetailSerializer 上获取字段 reviews 的值时出现 AttributeError。
序列化程序字段可能命名不正确,并且与 Package 实例上的任何属性或键都不匹配。
原始异常文本为:“Package”对象没有“reviews”属性。
我的模型:
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',)
我的看法:
class AllPackageDetailAPIView(RetrieveAPIView):
queryset = Package.objects.all()
serializer_class = PackageDetailSerializer
我的序列化器:
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']
我的网址:
path('api/allpackages/<int:pk>', views.AllPackageDetailAPIView.as_view(), name='api-package-detail'),
【问题讨论】:
标签: django api serialization django-rest-framework attributes