Django 模型顺序按模型方法或模型字段计算

时间:2021-05-08 21:44:43

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

我有一个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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

    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())

相关问题