尝试减去两个不同的列时,出现此错误:
>>> Product.objects.annotate(Sum('producttransactiondetails__purchase_quantity') - Sum('producttransactiondetails__sales_quantity'))
Traceback (most recent call last):
File "/usr/lib/python3.6/code.py", line 91, in runcode
exec(code, self.locals)
File "<console>", line 1, in <module>
File "/home/....env/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/.....env/lib/python3.6/site-packages/django/db/models/query.py", line 1032, in annotate
if arg.default_alias in kwargs:
AttributeError: 'CombinedExpression' object has no attribute 'default_alias'
Run Code Online (Sandbox Code Playgroud)
以下是模型:
class ProductTransactionDetails(models.Model):
product = models.ForeignKey(Product, on_delete=models.PROTECT)
product_purchase = models.ForeignKey(ProductTransaction, on_delete=models.PROTECT)
purchase_quantity = models.PositiveIntegerField(default=0)
sales_quantity = models.PositiveIntegerField(default=0)
discount = models.DecimalField(max_digits=20, decimal_places=2)
product_price = models.DecimalField(max_digits=20, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Product(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
name = models.CharField(max_length=1000, db_index=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
您尚未为组合表达式指定列名。
该annotate()子句的输出是一个QuerySet; 这QuerySet可以使用任何其他QuerySet操作进行修改。所以每个值都需要在一个列中,每个列都需要一个名称(您忘记添加)
做
Product.objects.annotate(in_stock_quantity=Sum('producttransactiondetails__purchase_quantity') - Sum('producttransactiondetails__sales_quantity'))
Run Code Online (Sandbox Code Playgroud)
注意in_stock_quantity=这里
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |