我有一个Django Model
,OrderItem
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_date
或 dispatch_date
和 order_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
有什么建议吗?
答案 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())