Django - 过滤添加的属性到模型

时间:2015-10-24 17:43:26

标签: django django-models django-views

我想在我的模型中添加一些属性,它存储一些零件的数量,然后按此属性进行过滤和排序:

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。

如何通过添加属性来过滤和排序对象?

3 个答案:

答案 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中获取值)并使用其他属性修改结果列表。