我想在我的模型中添加一些属性,它存储一些零件的数量,然后按此属性进行过滤和排序:
models.py
class MAG_warehouse(models.Model):
id_part=models.OneToOneField(MAG_magazyn)
qty_min=models.IntegerField()
qty=models.IntegerField()
views.py
def view(requst):
alert_qty=1.5 #relative quantity, when part should be bought
parts=MAG_warehouse.objects.all()
for item in parts:
item.rel_qty=float(item.qty)/item.qty_min
if item.rel_qty <=alert_qty:
item.color="red" #for css styling
item.alertflag=1
else:
item.alertflag=0
#What i would
#like to have:
sorted_parts=parts.filter(alertflag__exact=1).order_by('rel_qty')
但不幸的是我有属性错误。没有过滤/排序,我可以在模板中看到item.rel_qty和item.color。
如何通过添加属性来过滤和排序对象?
答案 0 :(得分:1)
Django的.filter和.order_by是数据库操作,因为你将color / rel_qty / alertflag添加到对象中,但它们不存在于数据库中,你不能使用它们。你必须使用Python,比如
sorted_parts = sorted([part for part in parts if part.alertflag == 1], key=lambda part: part.relqty)
虽然你可以写几个其他的方法来确定。
答案 1 :(得分:0)
正如您所说,您正在获取过滤器和order_by的属性错误bcoz,但我认为您的代码正好在下面就是示例。我确定属性错误对象不在您的属性中/不在您的对象实例中。我得到了正确的输出。如果你提供错误的快照,将有助于找到你的解决方案。
>>> from .models import Model
>>> instances = Model.objects.all()
>>> sorted_instance = instances.filter(column1__exact=45).order_by('column2')
>>> sorted_d
[<Model: Not Finalized>, <Model: Finalized>, <Model: Orderised>, <Model: unordered>]
>>>
答案 2 :(得分:0)
您可以尝试使用.values()
(实际从db中获取值)并使用其他属性修改结果列表。