我有三种模式:
class Product(models.Model):
idproduct=models.AutoField(primary_key=True)
productname=models.CharField(max_length=100, blank=False, null=False)
product_state=models.BooleanField(default=True)
class ProductInventory(models.Model):
idinventory=models.AutoField(primary_key=True)
product_idproduct=models.ForeignKey(Product)
storage_idstorage=models.ForeignKey(Storage)
class Sale(models.Model):
idsale=models.AutoField(primary_key=True)
sale_date = models.DateTimeField(default=timezone.now)
inventory_idinventory=models.ForeignKey(ProductInventory)
我想要的是获得本月销售的所有产品,我试过这个:
thisdate=datetime.today()
products=Product.objects.filter(product_state=1,productinventory__sale__sale_date__month=thisdate.month).values('pk','productname','productinventory__sale__sale_date')
但首先,它给了我"不支持嵌套查找"所以我删除了月份过滤器,但之后它给了我一个FieldError:Cannot resolve keyword 'sale' into field
我该怎么做?
答案 0 :(得分:2)
为什么要查询产品?为什么不从Sale
查询?
Sale.objects.filter(sale_date__month=thisdate).filter(inventory_idinventory__product_idproduct__productstate=True).values('inventory_idinventory __product_idproduct__pk', 'inventory_idinventory __product_idproduct__ productname')
另外,你的命名惯例非常糟糕,我相信Henry H提供了一个清理解决方案,我也会推荐它。如果你清理了它,你可以使用自定义管理器方法使这看起来非常好看。
答案 1 :(得分:1)
class Product(models.Model):
name=models.CharField(max_length=100, blank=False, null=False)
state=models.BooleanField(default=True)
class Product_Inventory(models.Model):
product=models.ForeignKey(Product)
storage=models.ForeignKey(Storage)
class Sale(models.Model):
date = models.DateTimeField(default=timezone.now)
product_inventory=models.ForeignKey(Product_Inventory)
thisdate=datetime.today()
inventory=[]
products=[]
sales = Sale.objects.filter(date__month = thisdate.month)
for item in sales:
inventory.append(Product_inventory.objects.filter(sale = item))
for product in inventory:
products.append(Product.objects.filter(product_inventory = product))
print products
这样的事情会起作用。我很自由地清理你的模型,因为它很难阅读。 ID会自动添加到您的模型中(如pk),因此您无需在此处添加ID。