【问题标题】:Django model order by model method or calculation on model fields通过模型方法或模型字段计算的Django模型顺序
【发布时间】:2021-07-30 19:02:55
【问题描述】:

我有一个Django ModelOrderItem

class OrderItem(models.Model):
   order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='order_line')
   quantity = models.PositiveIntegerField(default=1)
   title = models.CharField(max_length=100)
   order_number = models.CharField(max_length=25, null=True, blank=True, verbose_name='Order Number')
   order_date = models.DateField(auto_now_add=True)
   dispatch_date = models.DateField(auto_now_add=True)
   cancel_date = models.DateField(auto_now_add=True)
   

我有一个模型函数来计算今天和 OrderItem order_datedispatch_dateorder_date 之间的天数

    def get_aging(self):
        today = datetime.today().date()
        if self.dispatch_date is not None:
            aging = self.dispatch_date - self.order_date
            return aging.days
        elif self.cancel_date is not None:
            return 0
        else:
            aging = today - self.order_date
            return aging.days

我想通过相同的计算订购OrderItems。我尝试使用 python 排序,但我无法在 python 排序方法创建的列表上应用django FilterSet。这是我认为的代码,我正在使用自定义模板,因为我允许对数据进行内联编辑。

order_qs = OrderItem.objects.all()
sorted_qs sorted(order_qs, key= lambda a: a.get_aging())
user_filter_orders = OrderItemsFilter(request.GET, queryset=order_qs)

由于 sorted 方法返回列表的错误: list 对象没有属性 model

有什么建议吗?

【问题讨论】:

    标签: django django-models django-views django-filter


    【解决方案1】:

    改变指令的执行顺序,而不是先过滤后排序,先过滤后排序

        order_qs = OrderItem.objects.all()
        user_filter_orders = OrderItemsFilter(request.GET, queryset=order_qs)
        sorted_qs = sorted(user_filter_orders, key= lambda a: a.get_aging())
    
    

    【讨论】:

    • 不幸的是,这不起作用,因为 OrderItemFilter 没有迭代。
    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多