django 无法将关键字“average_rating”解析为字段

ycl3bljg  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(106)

这是我的模型和视图文件。

class Article(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='articles')
    caption = models.CharField(max_length=250)
    
    @property
    def average_rating(self):
        return self.articlecomments.all().aggregate(Avg('rate')).get('rate__avg', 0.00)

class ArticleComment(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    article = models.ForeignKey(Article, on_delete=models.CASCADE, null=True, blank=True, related_name='articleratings')
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='articleratings_author')
    rate = models.IntegerField(default='0')

个字符
我试图做的是排序的文章,其评级,但它不工作。它给了我这个错误:

raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'average_rating' into field. Choices are:......


我把它作为一个财产。我该如何解决这个问题?有其他方法吗?

y0u0uwnf

y0u0uwnf1#

不能按属性排序,因为数据库中不存在此字段。
首先注解此字段,然后使用order_by
试试这个:

queryset = Article.objects.annotate(
    average_rating=Avg('articlecomments__rate', default=0)
).order_by('-average_rating')

字符串
编辑:添加逻辑以返回0值作为默认值

相关问题