为什么@property django decorator不起作用

qij5mzcb  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(107)

我需要将'def get_销售'方法传递给视图中的模型,以便按get_sale对产品进行排序,但传递后出现错误
models.py

@property
    def get_sale(self):
        '''Расчитать стоимость со скидкой'''
        price = int(self.price * (100 - self.sale) / 100)
        return price

views.py

class SortItems(GoodsHome):#сортировка товара
    def get_queryset(self):
        sort_types = {
            '0': '-time_create',
            '1': 'time_create',
            '2': 'get_sale',
            '3': '-get_sale',
        }

        sort_type = sort_types[self.kwargs['sort_type']]

        if 'query' in self.kwargs:
            query = self.kwargs['query']
            return super(SortItems, self).get_queryset().filter(Q(artist__icontains=query) |
                                                                Q(album__icontains=query)).order_by(sort_type)

        return super(SortItems, self).get_queryset().order_by(sort_type)

错误

无法将关键字'get_销售'解析为字段

kupeojn6

kupeojn61#

这是因为get_sale不是order_by要求的Django字段。
我建议您在F表达式中使用注解。

queryset = (
    super(SortItems, self)
    .get_queryset()
    .filter(
         Q(artist__icontains=query) 
         |
         Q(album__icontains=query)
    )
    .annotate(get_sale=int(F(price) * (100 - F(sale)) / 100))
)

return queryset.order_by(sort_type)

相关问题