6

我正在遵循@Yauhen Yakimovich 在这个问题中使用的方法:

属性是否适用于 django 模型字段?

拥有一个模型字段,它是不同模型的计算。

问题:

FieldError: Cannot resolve keyword 'rating' into field. Choices are: _rating

rating模型字段 inst 正确隐藏并被我的属性覆盖,当rating我尝试访问它时导致错误。

我的模型:

class Restaurant(models.Model):    
    ...
    ...
    @property
    def rating(self):
        from django.db.models import Avg
        return Review.objects.filter(restaurant=self.id).aggregate(Avg('rating'))['rating__avg']

Yauhen 回答中的模型:

class MyModel(models.Model):
    __foo = models.CharField(max_length = 20, db_column='foo')
    bar = models.CharField(max_length = 20)

    @property
    def foo(self):
        if self.bar:
            return self.bar
        else:
            return self.__foo

    @foo.setter
    def foo(self, value):
        self.__foo = value

关于如何正确隐藏rating字段和定义@property技术的任何想法?

4

2 回答 2

3

通过使用解决sorted()

我正在使用带有 order_by() 的查询来调用评级。order_by() 处于数据库级别,不知道我的财产。Soultion,改用 Python 进行排序:

sorted(Restaurant.objects.filter(category=category[0]), key=lambda x: x.rating, reverse=True)[:5]

如果您遇到类似的错误,请通过您的视图检查可能调用该属性的任何内容。属性将不再在数据库级别起作用。

于 2013-08-27T03:52:42.350 回答
1

更改此行:

self._rating = Review.objects.filter(restaurant=self.id).aggregate(Avg('rating'))['rating__avg']

进入这个:

self._rating = Review.objects.filter(restaurant=self.id).aggregate(Avg('_rating'))['_rating__avg']

(注意查询中的参考从ratingrating__avg_rating和的变化_rating__avg

于 2013-08-26T15:47:28.433 回答