我试图根据2个字段之间的关系来查看我的查询集。
然而总是得到我的字段未定义的错误。
我的模型有几个计算列,我想只得到字段A的值大于字段B的记录。
所以这是我的模特
class Material(models.Model):
version = IntegerVersionField( )
code = models.CharField(max_length=30)
name = models.CharField(max_length=30)
min_quantity = models.DecimalField(max_digits=19, decimal_places=10)
max_quantity = models.DecimalField(max_digits=19, decimal_places=10)
is_active = models.BooleanField(default=True)
def _get_totalinventory(self):
from inventory.models import Inventory
return Inventory.objects.filter(warehouse_Bin__material_UOM__UOM__material=self.id, is_active = true ).aggregate(Sum('quantity'))
totalinventory = property(_get_totalinventory)
def _get_totalpo(self):
from purchase.models import POmaterial
return POmaterial.objects.filter(material=self.id, is_active = true).aggregate(Sum('quantity'))
totalpo = property(_get_totalpo)
def _get_totalso(self):
from sales.models import SOproduct
return SOproduct.objects.filter(product__material=self.id , is_active=true ).aggregate(Sum('quantity'))
totalso = property(_get_totalpo)
@property
def _get_total(self):
return (totalinventory + totalpo - totalso)
total = property(_get_total)
在我看来,这是我尝试获取条件查询集
的行 po_list = MaterialFilter(request.GET, queryset=Material.objects.filter( total__lte = min_quantity ))
但是我收到了min_quantity未定义的错误
可能是什么问题?
编辑:
我的问题解决了,谢谢@Moses Koledoye,但是在相同的代码中我现在有不同的问题
无法将关键字'total'解析为字段。选项包括:am,author,author_id,bom,bomversion,code,creation_time,description,id,inventory,is_active,is_production,itemgroup,itemgroup_id,keywords,materialuom,max_quantity,min_quantity ,名称,pomaterial,产品,产品,slug,trigger_quantity,uom,updated_by,updated_by_id,valid_from,valid_to,version,warehousebin
基本上它没有显示我在模型中的任何计算字段。
答案 0 :(得分:4)
Django无法编写以值未知的字段为条件的查询。您需要使用F
表达式:
from django.db.models import F
queryset = Material.objects.filter(total__lte = F('min_quantity'))
您的FilterSet
变为:
po_list = MaterialFilter(request.GET, queryset = Material.objects.filter(total__lte=F('min_quantity')))
来自docs:
F()对象表示模型字段的值或已注释 柱。它可以引用模型字段值和 使用它们执行数据库操作而不必实际拉动 他们从数据库中进入Python内存