首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目对象没有属性"review_set“

项目对象没有属性"review_set“
EN

Stack Overflow用户
提问于 2018-10-12 20:16:17
回答 2查看 338关注 0票数 0

我收到一个错误,当我尝试使用Numpy获取评分的平均值时,显示为Project object has no attribute review_set

HTML看起来像这样,有什么问题吗?

代码语言:javascript
复制
<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>

型号:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2018-10-12 20:19:45

你有related_name="review"

代码语言:javascript
复制
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"会更清楚(因为每个项目可以有多个评论)。

代码语言:javascript
复制
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"

票数 3
EN

Stack Overflow用户

发布于 2018-10-13 19:31:45

谢谢,它起作用了。我将related_name编辑为"reviews“,并在数据库上进行了迁移。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52779374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档