我收到一个错误,当我尝试使用Numpy获取评分的平均值时,显示为Project object has no attribute review_set。
HTML看起来像这样,有什么问题吗?
<h5>{{ project.review.count }} reviews ({{
project.average_design | floatformat }} average rating of design)</h5>
<h5>{{ project.review.count }} reviews ({{
project.average_content | floatformat }} average rating of content)</h5>
<h5>{{ project.review.count }} reviews ({{ project.average_usability | floatformat }} average rating of usability)</h5>型号:
class Project(models.Model):
title = models.TextField(max_length=200, null=True, blank=True, default="title")
project_image = models.ImageField(upload_to='picture/', null=True, blank=True)
description = models.TextField()
project_url=models.URLField(max_length=250)
def average_design(self):
design_ratings = list(map(lambda x: x.design_rating, self.review_set.all()))
return np.mean(design_ratings)
def average_usability(self):
usability_ratings = list(map(lambda x: x.usability_rating, self.review_set.all()))
return np.mean(usability_ratings)
def average_content(self):
content_ratings = list(map(lambda x: x.content_rating, self.review_set.all()))
return np.mean(content_ratings)
class Review(models.Model):
RATING_CHOICES = (
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5'),
(6, '6'),
(7, '7'),
(8, '8'),
(9, '9'),
(10, '10'),
)
project = models.ForeignKey(Project, null=True, blank=True, on_delete=models.CASCADE, related_name="review")
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE, related_name='user')
image = models.ForeignKey(Image, on_delete=models.CASCADE, related_name="project", null=True, blank=True)
comment = models.TextField()
design_rating = models.IntegerField(choices=RATING_CHOICES, null=True, blank=True)
usability_rating = models.IntegerField(choices=RATING_CHOICES, null=True, blank=True)
content_rating = models.IntegerField(choices=RATING_CHOICES, null=True, blank=True)发布于 2018-10-12 20:19:45
你有related_name="review"。
project = models.ForeignKey(Project, null=True, blank=True, on_delete=models.CASCADE, related_name="review")因此,您应该使用self.review.all()而不是self.review_set.all()。
如果你使用related_name="reviews"会更清楚(因为每个项目可以有多个评论)。
project = models.ForeignKey(Project, null=True, blank=True, on_delete=models.CASCADE, related_name="reviews")然后你可以使用self.reviews.all()。
请注意,将related_name="user"和related_name="project"用于其他外键是没有意义的。它们分别用于获取给定用户和图片的相关评论,因此最好对这两个用户都使用related_name="reviews"。
发布于 2018-10-13 19:31:45
谢谢,它起作用了。我将related_name编辑为"reviews“,并在数据库上进行了迁移。
https://stackoverflow.com/questions/52779374
复制相似问题